我有这个代码
public void askUserForStrategy(){
try{
System.out.println("What strategy do you want to use?\n");
System.out.println("1 = Math.random\t 2 = System time\t "
+ "3 = Sum of Math.random and System time");
int strategy = sc.nextInt();
selectStrategy(strategy);
}
catch(InputMismatchException Exception){
System.out.println("That is not an integer. Try again.\n");
askUserForStrategy();
}
}
我想要它做的基本上是要求用户输入一个整数,例如,如果用户输入一个字符串,捕获该异常并再次启动该方法(要求用户输入一个整数值(value))。但是当用户输入字符串时该方法会循环。
最佳答案
当 nextInt()
引发异常时,Scanner
对象会尝试在下一次调用中使用相同的字符串。
尝试在try
中分配一个新的Scanner
对象。或者尝试在catch
中调用nextLine()
,这样你就会丢弃非法行。
请注意,这种方法不好,因为非法输入过多(非常多,但理想的是无限次尝试)后会发生堆栈溢出。
我建议您在 try
正文末尾使用 do-while
和 return
。
关于java - 使用try/catch时如何避免无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47151934/