Объект сканера выдает мне ошибку в цикле While

#java #while-loop #java.util.scanner

#java #цикл while #java.util.scanner

Вопрос:

У меня возникла небольшая проблема с правильной запуском этой программы.

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

public class RandyGilmanhw2a {
    int year_of_birth;
    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 = year.nextInt();

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

            System.out.println("Please enter the year you were born: ");
            int year_of_birth = year.nextInt();//ERROR OCCURS HERE SAYS VARIABLE
            //year_of_birth ALREADY DEFINED IN METHOD MAIN
        }//end while 

        user1.getAge(year_of_birth);
        System.out.println("You are "   age   " years old." );//ERROR HERE SAYS NON-STATIC
        // VARIABLE age CANNOT BE REFERENCED FROM A STAIC CONTEXT

    }//end main

}//end class
  

Я прокомментировал области, которые отображают ошибку. Я пытаюсь создать программу, которая отображает возраст человека, вводя в него возраст. Однако, если они вводят год до 1900 или после 2014, я хочу, чтобы он попросил пользователя повторно ввести свой год рождения. Кажется, я не могу найти проблему. Буду признателен за любую помощь.

Ответ №1:

Просто удалите int объявление. Таким образом, вы переопределяете переменную. Итак, переключите это:

 int year_of_birth = year.nextInt();
  

к этому:

 year_of_birth = year.nextInt();
  

Ответ №2:

Удалите int at int year_of_birth = year.nextInt(); и измените вывод age на этот:

 System.out.println("You are "   user1.getAge(year_of_birth)   " years old." );
  

Ответ №3:

Удалите int из второй инициализации year_of_birth , и ваша проблема должна исчезнуть.

Ответ №4:

Не определяйте year_of_birth as int снова в цикле while, как вы определили в out of loop.

  while( year_of_birth < 1900 || year_of_birth > 2014 ) {//begin while loop
        ...
        year_of_birth = year.nextInt();//just assign next value
        ...
    }