#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 … приятно знать, что я потратил большую часть своего дня из-за неэффективного инструмента, который мы ДОЛЖНЫ использовать…