Я продолжаю получать исключение в потоке main java.util.NoSuchElementException

Итак, я пытаюсь создать простую программу на Java, которая читает текстовый файл (из аргумента командной строки), и пользователь может проверить, находится ли введенное число в текстовом файле.

File inputFile = new File(args[0]);
Scanner scanman = new Scanner(inputFile); //Scans the input file
Scanner scanman_2 = new Scanner(System.in); //Scans for keyboard input
int storage[] = new int[30]; //Will be used to store the numbers from the .txt file

for(int i=0; i<storage.length; i++) {
  storage[i]=scanman.nextInt();
  }
System.out.println("WELCOME TO THE NUMERICAL DATABASE"+
                  "\nTO CHECK TO SEE IF YOUR NUMBER IN THE DATABASE"+
                  "\nPLEASE ENTER IT BELOW! TO QUIT: HIT CTRL+Z!");
while(scanman_2.hasNext()){
  int num_store = scanman_2.nextInt();
  boolean alert = false;
  for (int i=0; i<storage.length; i++) {
     if(storage[i]==num_store){
        alert=true;
        }
     }
  if (alert) {
     System.out.println("Yep "+num_store+" is in the database\n");
     }
  else {
     System.out.println("Nope, "+num_store+" is not in the database\n");
     }
  }
System.out.println("See ya!");                
  }
}

Каждый раз, когда я пытаюсь запустить его, я продолжаю получать:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Database.main(Database.java:17)

Я сделал программу, подобную этой, и у меня не было проблем. Кто-нибудь знает, что я делаю неправильно?


person Edax    schedule 08.03.2014    source источник


Ответы (2)


Вы повторно вызываете nextInt(), но не проверяете, есть ли есть следующее целое число. Изменить это

for(int i=0; i<storage.length; i++) {
  storage[i]=scanman.nextInt();
}

к этому

for(int i=0; i<storage.length  &&  scanman.hasNext(); i++) {
  storage[i]=scanman.nextInt();
}

Вам нужно будет определить, приемлемо ли это с учетом ваших требований, а если нет, выяснить, почему storage.length и количество int-входов отличаются от ожидаемых.

person aliteralmind    schedule 08.03.2014
comment
Спасибо. Это исправило это. - person Edax; 08.03.2014

Добавление scannerName.hasNext() в мой цикл for устранило проблему.

person jakerumbles    schedule 04.02.2016