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();
}
}
我想不断地从用户那里获得输入,但有一些限制。输入必须包含 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();
}
}