我有一个 try-catch ,旨在捕获任何非整数的内容。当我输入非整数(例如 5.6)时,它告诉我只允许输入整数,并让我重试(应该如此)。但是,如果我再次输入非整数,它不会说什么,并且会继续接受输入,使输出留空。
if (choicesObjects == b) {
System.out.println("TEST 2");
System.out.println("Object: Right triangle");
System.out.println("\nEnter length of Right triangle: ");
int lengthOfTriangle = 0;
try {
lengthOfTriangle = input.nextInt();
} catch(InputMismatchException e) {
System.out.println("\nError: user input must be an integer greater than 0.\n");
System.out.println("Object: Right triangle");
System.out.println("\nEnter length of Right triangle: ");
input.next();
}
//method stuff
}
try/catch
语句不是循环。它总是会被执行一次。
当然,如果
try
块内有循环,则该块将继续执行直到终止。但这样的循环需要使用像 while
或 for
这样的显式命令。
显然,当输入非整数值(例如 5.6)时,
nextInt()
语句会抛出异常并转到 catch
块。如果提供该方法的完整代码可以给出更好的解释。
为此,您可以定义一个函数,类似这样的函数应该可以工作
private int getNextInt(Scanner input) {
boolean isInt = false;
int userInput;
while(!isInt) {
try {
userInput = Integer.valueOf(input.next());
isInt = true;
} catch(NumberFormatException e) {
// Do nothing with the exception
}
}
return userInput;
}
这应该运行,直到给定的输入是 int,然后返回所述 int
类似这样的事情
Boolean check = true;
while (check) {
if choicesObjects == b {
System.out.println("TEST 2");
System.out.println("Object: Right triangle");
System.out.println("\nEnter length of Right triangle: ");
int lengthOfTriangle = 0;
try {
lengthOfTriangle = input.nextInt();
} catch(InputMismatchException e) {
System.out.println("\nError: user input must be an integer greater than 0.\n");
check = false;
System.out.println("Object: Right triangle");System.out.println("\nEnter length of Right triangle:");
input.next();
}
//method stuff
}
}
您可以将代码更新为这样的 -
Scanner in = new Scanner(System.in);
int num = 0;
while(true) {
try{
num = in.nextInt();
break;
}catch(Exception e){
//print statements
System.out.println("Try again");
}
}
System.out.println("Done");