[英]try catch inside while loop in Java
我试图阻止用户输入非数字和负值。 当变量 digit <= 0 时,循环将继续。 如果尝试捕获错误,则该数字将设置为 0 以再次进入循环。 但是当用户输入一个非数字值时,它并没有回头要求用户输入一个数字,而是进入了一个无限循环。
import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int digit = 0;
String playerNUmber;
while (digit <= 0) {
System.out.println("How many digit you want to guess?");
try {
digit = s.nextInt();
char[][] users = new char[digit][1];
do {
System.out.println("Please enter " + digit + " digit/s numbers.");
playerNUmber = s.next();
if (playerNUmber.length() == digit) {
System.out.println("Player number : " + playerNUmber);
for (int i = 0; i < digit; i++) {
users[i][0] = playerNUmber.charAt(i);
}
} else {
System.out.println("You must enter a " + digit + " number.");
}
} while (playerNUmber.length() != digit);
} catch (Exception e) {
System.out.println("Enter numbers only");
digit = 0;
}
}
}
}
使用 Scanner,当引发 InputMismatchException 时,Scanner 不会转到下一个令牌,因为它让我们有机会处理该令牌。
在您的情况下,您需要使令牌无效。 为此,您只需在 catch 块中使用 nextLine :
s.nextLine();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.