Метод getSelection позволяет пользователю вводить число со ссылкой на список команд. Если пользователь вводит правильный номер, код работает без сбоев. Однако, если пользователь вводит недопустимое число, код успешно вызовет метод testSelection и будет правильно работать до тех пор, пока не будет вызван метод getSelection. Когда метод вызывается, он продолжает пропускать строку user_input (в режиме отладки), а затем выдает ошибку отсутствия такого элемента. Я знаю, что это означает, что он получает нулевой указатель, но я не могу заставить код приостанавливаться, чтобы пользователь мог ввести новый выбор.
Я попытался добавить оператор if с помощью scan.hasNext, чтобы убедиться, что пользователь ввел новый выбор, и scan.nextLine, чтобы переместить сканер на новую строку. Я не думаю, что это работает, потому что сканер создается и закрывается при каждом запуске метода. При этом я не могу понять, почему он пропускает ввод второго вызова. Я также попытался заставить метод getSelection вызывать метод, если он действителен, ложен, и чтобы testSelection возвращал false, если ввод не соответствует требованиям.
public static String getSelection() {
Scanner scan = new Scanner(System.in);
System.out.println("Please enter selection: ");
String user_input = scan.next();
scan.close();
boolean valid;
try{
valid = testSelection(Integer.parseInt(user_input));
} catch(NumberFormatException e) {
valid = testSelection(-1);
}
if(valid == true) {
return user_input;
}
return "Error";
}
public static boolean testSelection(int i) {
if(i == -1) {
System.out.println("Please enter an integer (1-7).");
getSelection();
}
if(i > 7 || i < 1) {
System.out.println("Invalid Selection");
getSelection();
}
return true;
}
На выходе должен быть выбор пользователя из списка команд до тех пор, пока не будет введена правильная команда.