Меню печати. Исключение java.util.NoSuchElementException строка не найдена

#java #exception #switch-statement #user-defined-functions

#java #исключение #оператор переключения #определяемые пользователем функции

Вопрос:

Я работаю над относительно простым проектом, который отображает меню и предлагает пользователю ввести данные, которые будут использоваться в операторе switch, и все это содержится в методе. Однако программа генерирует исключение;

 Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at AuthoringAssistant.printMenu(AuthoringAssistant.java:49)
at AuthoringAssistant.main(AuthoringAssistant.java:64)
  

Вот фрагмент кода, который, как я полагаю, вызывает проблему;

    private static char printMenu(){
  Scanner scnr = new Scanner(System.in);
  System.out.println("nMENU");
  System.out.println("c - Number of non-whitespace characters");
  System.out.println("w - Number of words");
  System.out.println("f - Find text");
  System.out.println("r - Replace all !'s");
  System.out.println("s - Shorten spaces");
  System.out.println("q - Quit");

  System.out.println("nChoose an option: ");


  char choice=scnr.nextLine().charAt(0);//line 49
  return choice;
}
  

Где-то внизу в main, где вызывается функция:

  while(endMenu == false){
    char ch =printMenu();//line 64

     switch(ch){
  

Спасибо, если вы можете предоставить какие-либо отзывы!

Комментарии:

1. Похоже, в текущем коде нет никаких ошибок со сканером. Не могли бы вы предоставить дополнительную информацию о том, когда это происходит?

Ответ №1:

(Извините, у меня недостаточно репутации для комментариев, это должен быть комментарий.)

Когда вы получаете исключение? Он ждет, пока вы введете ввод? И какое значение вы вводите в командной строке?

Может быть, потому, что вы привязываетесь к вызову charAt() с помощью nextLine(), он выдает исключение. Можете ли вы попробовать это?

 String choiceString = scnr.nextLine();
char choice = choiceString.charAt(0);
return choice;  
  

Комментарии:

1. проблема возникает, когда ch = printMenu(); вызывается в main. Программа распечатывает меню и запрашивает у пользователя ввод . Когда пользователь вводит символ, появляется исключение. Я попробовал ваше решение, Джерин Джозеф, но исключение по-прежнему указывает на scnr.nextline(); statment и at ch = printMenu();

2. Кстати, я использую это через обучающий инструмент Zybooks.

3. @scubasteve7 Я не вижу ничего плохого в коде. Возможно, проблема в том, что это выполняется с помощью инструмента. Вероятно, инструмент неправильно считывает входной поток.

4. @scubasteve7 Вы можете попробовать scnr.next(); вместо nextLine(), просто безумная попытка, не могу понять, как ведет себя инструмент zybooks.

5. Спасибо за усилия, чувак, я запустил программу в среде ide, и она работает просто отлично, так что, я думаю, это просто дурацкая программа zybook … приятно знать, что я потратил большую часть своего дня из-за неэффективного инструмента, который мы ДОЛЖНЫ использовать…