Я также не могу использовать input2.close ().
Никогда не закрывайте экземпляр Scanner
для System.in
, поскольку он также закрывает System.in
.
Я попытался использовать input2.next () при перехвате, но затем он ждет другого ввода, я не хочу
Использовать Scanner::nextLine
вместо Scanner::next
, Scanner::nextInt
и c. Проверьте Сканер пропускает nextLine () после использования next () или nextFoo ()? , чтобы узнать почему.
Кроме того, попробуйте использовать do...while
везде, где вам нужно попросить пользователя ввести снова данные в случае неверной записи.
Ниже приведен пример кода, включающий следующие пункты:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int option;
boolean valid;
Scanner input2 = new Scanner(System.in);
do {
valid = true;
System.out.println("Choose an option:\n" + "1-Get camera information\n" + "2-Submit Data\n" + "3-Exit");
try {
option = Integer.parseInt(input2.nextLine());
if (option < 1 || option > 3) {
throw new IllegalArgumentException();
}
// ...Place here the rest of code (which is based on the value of option)
} catch (IllegalArgumentException e) {
System.out.println("This is an invalid entry. Please try again.");
valid = false;
}
} while (!valid);
}
}
Пример прогона:
Choose an option:
1-Get camera information
2-Submit Data
3-Exit
abc
This is an invalid entry. Please try again.
Choose an option:
1-Get camera information
2-Submit Data
3-Exit
6
This is an invalid entry. Please try again.
Choose an option:
1-Get camera information
2-Submit Data
3-Exit
2
Не стесняйтесь комментировать в случае любых дальнейших сомнений / проблем.