เจอแบบที่คาดไม่ถึงเรื่อยๆ

ฉันกำลังเขียนโปรแกรมสำหรับโรงเรียน ฉันดำเนินการส่วนใหญ่เสร็จแล้ว แต่ยังคงได้รับข้อผิดพลาดประเภทที่ไม่คาดคิด: required value found class ทันทีหลังจากวัตถุสแกนเนอร์ของฉัน มันดูถูกต้องสำหรับฉัน แต่ฉันได้รับข้อผิดพลาดนี้ต่อไป ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

/**
 *
 * @author Randy
 */
import java.util.Scanner;//Import scanner

public class RandyGilmanhw2a {
    static int year_of_birth;
    static int age;

    public RandyGilmanhw2a (){//begin constructor
        year_of_birth = 1900;
        age = 0;
    }//end constructor

    public int getYear(){//get year method
        return year_of_birth;
    }//end method

    public int getAge(int year_of_birth){//get year method
        age = 2014 - year_of_birth;
    return age;
    }//end get year method

    public void setYear (int year){//set year method
        this.year_of_birth = year;
    }//end method

    public static void main(String[] args) {//begin main

        RandyGilmanhw2a user1 = new RandyGilmanhw2a();

        Scanner year = new Scanner(System.in);//create a scanner object
        System.out.println("Please enter the year you were born: ");
        int year_of_birth = int year.nextInt();


        while( year_of_birth < 1900 || year_of_birth > 2014 ) {//begin while loop
            System.out.print("Please reenter the year you were born." );
            System.out.print("You must have an integer between 1900 and 2014:" );
            System.out.print("\n");
        }//end while 

        user1.getAge(year_of_birth);
        System.out.print("You are " + age + "years old." );

    }//end main

}//end class

โดยเฉพาะอยู่ที่รหัสนี้

int year_of_birth = int year.nextInt();

ขอบคุณ


person Randy Gilman    schedule 04.07.2014    source แหล่งที่มา
comment
ลบ int ตัวที่สองออกจากบรรทัดนั้น   -  person shmosel    schedule 04.07.2014
comment
2 สิ่ง -- ช่อง static เหล่านั้นอาจไม่ควรเป็น static และคุณไม่จำเป็นต้องทำเครื่องหมายวงเล็บปีกกาแบบนั้น การเยื้องที่ดีควรทำเพื่อคุณ   -  person awksp    schedule 04.07.2014
comment
ฉันกำจัดค่าคงที่ในตัวแปร year_of_birth และ age ของฉันออกไป อย่างไรก็ตาม ที่รหัสนี้ System.out.print(You are + age + years old. ); ฉันได้รับตัวแปรที่ไม่คงที่ age ไม่สามารถอ้างอิงได้จากข้อผิดพลาดบริบทแบบคงที่   -  person Randy Gilman    schedule 04.07.2014


คำตอบ (2)


ปัญหา:

 int year.nextInt();

ไม่ใช่ local field แต่เป็น object ที่เรียกใช้เมธอดของมัน (nextInt) ที่จะส่งคืนจำนวนเต็ม ดังนั้นวิธีที่ถูกต้องในการเริ่มต้นเป็น year_of_birth คือ:

int year_of_birth = year.nextInt();//remove the int
person Rod_Algonquin    schedule 04.07.2014
comment
โอเค ได้ผล ฉันยังประสบปัญหากับตัวแปร year_of_birth อยู่เรื่อยๆ เช่นกัน หลังจากที่ฉันแก้ไขข้อผิดพลาดนั้นในบรรทัดเดียวกัน ฉันจะได้รับ: ตัวแปรท้องถิ่นซ่อนฟิลด์ - person Randy Gilman; 04.07.2014
comment
@RandyGilman หากคุณใช้ netbeans คุณต้องปิดการใช้งานข้อผิดพลาดนั้นเนื่องจากเป็นข้อบกพร่อง ติดตามกระทู้นี้ stackoverflow.com/questions/4122959/ - person Rod_Algonquin; 04.07.2014

การมีตัวแปรโลคัลที่มีชื่อเดียวกันกับฟิลด์ของคลาสนั้นไม่ใช่เรื่องผิดพลาด

IDE เช่น Eclipse มักจะมีตัวเลือกที่จะตั้งค่าสถานะการแชโดว์ชื่อดังกล่าวเป็นคำเตือน ดังนั้นคุณจะรู้ได้เมื่อทำสิ่งนี้โดยไม่ได้ตั้งใจ

แต่โปรดทราบว่าคุณสามารถเข้าถึงฟิลด์ของชั้นเรียนได้ตลอดเวลาโดยเติม "this" ไว้ข้างหน้า เช่น "this.year_of_birth"

การเปลี่ยนแปลงนี้เพื่อพิสูจน์สิ่งที่ฉันพูด:

   int year_of_birth_test = year.nextInt();//remove the int
person paul    schedule 04.07.2014