我想达到的效果就是,如果输入的不是一个int型,就捕获一个异常并提示用户重新输入,但是实际执行结果是,如果输入了一个错误的id1,就会无限循环catch中的代码,而不会允许再次输入
public static void main(String[] args) {
Random rand = new Random();int randNum = rand.nextInt(101);
boolean isSuccess = false;
System.out.println("我已经随机生成一个了数字,来猜猜这个数字,(^^)");
int times = 0;
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
while (!isSuccess) {
times++;
System.out.print("请输入:");
try {
int in = sc.nextInt();
if (in == randNum) {
isSuccess = true;
System.out.println("恭喜你,答对了,你已经猜了" + times + "次");
} else {
if (in > randNum)
System.out.println("大了,你已经猜了" + times + "次,再猜:");
else
System.out.println("小了,你已经猜了" + times + "次,再猜:");
}
} catch (InputMismatchException e) {
System.out.println("输入错误!");
continue;
}
}
这个问题百度到了,原因是如果不重置Scanner对象sc将会总在while死循环 trycatch,canner对象发生异常后就不能再被使用,所以一直报异常,变成了死循环
改成下面这样:
public static void main(String[] args) {
Random rand = new Random();
int randNum = rand.nextInt(101);
boolean isSuccess = false;
System.out.println("我已经随机生成一个了数字,来猜猜这个数字,(^^)");
int times = 0;
while (!isSuccess) {
times++;
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.print("请输入:");
try {
int in = sc.nextInt();
if (in == randNum) {
isSuccess = true;
System.out.println("恭喜你,答对了,你已经猜了" + times + "次");
} else {
if (in > randNum)
System.out.println("大了,你已经猜了" + times + "次,再猜:");
else
System.out.println("小了,你已经猜了" + times + "次,再猜:");
}
} catch (InputMismatchException e) {
System.out.println("输入错误!");
}
}
}
好问题解决了。