2016-01-09 3 views
0

Очень новое для программирования. Я знаю, что этот вопрос будет очень легко ответить опытным программистам. Я хотел бы продолжить выполнение этой программы, которая находит високосные годы, пока пользователь не войдет в «n». Программа заканчивается перед входом в y/n. Помощь очень ценится ... спасибо.Проблема с циклом while и сканером java

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     String another = "y"; 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Please enter a year "); 
     int year = scan.nextInt(); 

     while (another.equals("y")) { 

      if (year < 1582) { 
       System.out.println("Not an established Gregorian year."); 
      } else if (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0)) { 
       System.out.println("Not a leap year"); 
      } else { 
       System.out.println("Leap year!"); 
      } 

      System.out.println(); 
      System.out.print("Test another year (y/n)?"); 
      another = scan.nextLine(); 
     } 
    } 
} 
+3

Итак, в чем вопрос? – Mureinik

+1

отредактирован, чтобы более четко отразить проблему. – garserdt216

+2

Выражение scan.nextInt() потребляло int с клавиатуры, но оставило \ n позади. Итак, когда выполняется вызов scan.nextLine(), он получает пустую строку (которая не равна «y»). Следовательно, ваша петля выходит. Существует также вторая проблема, требующая исправления. Вызов scan.nextInt() должен находиться внутри цикла, а не снаружи. – LIProf

ответ

0

Ввод с того дня, когда человек вводит номер года в начале, не израсходован. Он хранится в «буфере», и когда программа достигает точки, в которой вы спрашиваете, хотите ли они сделать еще один год, она считывает ввод, который находится в буфере. Чтобы исправить это, вам просто нужно другое scan.nextLine(); перед важным.

Смежные вопросы