Продолжайте получать неожиданный тип

Пишу программу для школы. Я закончил большую часть этого, но я продолжаю получать сообщение об ошибке неожиданного типа: требуемое значение нашел класс сразу после моего объекта сканера. Это выглядит правильно для меня, но я продолжаю получать эту ошибку. Любая помощь будет оценена по достоинству.

/**
 *
 * @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 + 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, часто имеют параметры, которые будут помечать такое затенение имен как предупреждение, поэтому вы будете знать, когда вы случайно сделаете это.

Но обратите внимание, что вы всегда можете получить доступ к полю класса, добавив «это», например, «это.год_рождения».

Изменения к этому, чтобы доказать, что я говорю:

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