2016-10-17 3 views
-2

Im, создающий программу для чтения каждого ответа пользователя во внутреннем цикле, чтобы проверить, является ли этот год високосным или нет. Когда я запускаю его, консоль говорит мне:NoSuchElementException с использованием Scanner и System.in

Исключение в потоке «главный» java.util.NoSuchElementException

Что это значит и как я могу решить эту проблему, чтобы получить это работает?

import java.util.Scanner; 

public class GregorianCalendar { 

    public static void main(String[] args) { 

     int year, count, num; 

     //How many different years to look at 
     System.out.println("How many different years would you like to examine?"); 
     Scanner scan = new Scanner(System.in); 
     count = scan.nextInt(); 
     scan.close(); 

     //Number of iterations 
     num = 0; 

     while (count != num) 
     { 
      num++; 

      System.out.println("Enter year"); 
      Scanner keyboard = new Scanner(System.in); 
      year = keyboard.nextInt(); 
      keyboard.close(); 

      if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0 && year > 1582) { 
       System.out.println(year + " is a leap year!"); 
      } 

      else if (year % 100 == 0 && year % 400 != 0 || year % 100 != 0 && year > 1582) { 
       System.out.println(year + " is not a leap year!"); 
      } 

      else { 
      System.out.println("Error! " + year + " cannot be before the year 1582!"); 

      } 
     } 
    } 
} 
+0

не закрывайте сканер. он закрывает поток 'System.in'. – ifly6

ответ

-1

Проблема, с которой вы сталкиваетесь, заключается в том, что вы закрываете сканер и, следовательно, получаете исключение. Попробуйте следующее:

public static void main(String[] args) { 

     int year, count, num; 

     //How many different years to look at 
     System.out.println("How many different years would you like to examine?"); 
     Scanner scan = new Scanner(System.in); 
     count = scan.nextInt(); 

     //Number of iterations 
     num = 0; 

     while (count != num) 
     { 
      num++; 

      System.out.println("Enter year"); 
      year = scan.nextInt(); 

      if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0 && year > 1582) { 
       System.out.println(year + " is a leap year!"); 
      } 

      else if (year % 100 == 0 && year % 400 != 0 || year % 100 != 0 && year > 1582) { 
       System.out.println(year + " is not a leap year!"); 
      } 

      else { 
      System.out.println("Error! " + year + " cannot be before the year 1582!"); 

      } 
     } 

     scan.close(); 

    } 

Я бы также рекомендовал использовать только один сканер, как в коде.

+0

вам не нужно закрывать 'System.in'. На самом деле это не утечка ресурсов. – ifly6

+0

Приветствия! Спасибо за вход и совет! (Новое для программирования) – solorzke

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