While 和 try-catch 结构和异常

While and try-catch stracture and exceptions

我想不断地从用户那里获得输入,但有一些限制。输入必须包含 1 个整数、1 个字符串、1 个整数、1 个字符串。 (即“3+1-”、“1a4k”)。如果用户以错误的方式输入,我会像 "Bad input" 一样警告。

int a = scanner.nextInt();
String b = scanner.next();
int c = scanner.nextInt();
String d = scanner.next();

我将使用该结构来获取我想要的输入。但是,如果用户没有为 a 输入整数值,用户输入其他值,如 String 或其他东西,我也想警告 "Bad input"。我无法应付。我只是这样编码:

while(true) {
     try {
         System.out.print("Enter: ");
         int a = scanner.nextInt();
         String b = scanner.next();
         int c = scanner.nextInt();
         String d = scanner.next();
         // Some logics
     } 
     catch(Exception e) {
         System.out.println("Bad input");
         scanner.next();
     }
}

"3 + 1 -", "2 a 2 e", "3 t 3 -" 可以。

“3+1-”、“3+1-”、“3+1-”、“3+1-”都不行。

OK,没问题。但是,当输入不正常时,会输出多个警告。我只想要一个警告。

我该如何处理这个问题?

在发生异常和输入正常的情况下,您都应该消耗当前行的末尾,但您希望循环的下一次迭代从下一行读取输入。

while(true) {
     try {
         System.out.print("Enter: ");
         int a = scanner.nextInt();
         String b = scanner.next();
         int c = scanner.nextInt();
         String d = scanner.next();
         scanner.nextLine();
         // Some logics
     } 
     catch(Exception e) {
         System.out.println("Bad input");
         scanner.nextLine();
     }
}