java - 使用try/catch时如何避免无限循环?

标签 java try-catch

我有这个代码

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-whilereturn

关于java - 使用try/catch时如何避免无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47151934/

相关文章:

java - 如何在没有 ConcurrentModificationException 的情况下删除 List 迭代

Java API修改

javascript - try..catch 未捕获异步/等待错误

java - 在java中对每个方法使用一个大的try-catch是一种已知的好习惯吗?

javascript - Try-Catch 在 TestComplete 中不起作用

java - android 在 fragment 中使用什么代替 onRestart()

java - 无法通过 build.gradle 文件添加依赖项

java - 在eclipse中设置异常断点时忽略库

java - 当 Scanner.nextLong() 从 try block 中抛出 InputMismatchException 时,Scanner.next() 如何在 catch block 中获得相同的值?

typescript - 没有第三方库的类型安全错误处理