Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我有一个永无止境的do-while循环?_Java_Loops_Do While - Fatal编程技术网

Java 为什么我有一个永无止境的do-while循环?

Java 为什么我有一个永无止境的do-while循环?,java,loops,do-while,Java,Loops,Do While,我有一个不工作的do while循环。当我输入一个字符串而不是int时,它应该说“bla”并再次要求插入一个数字,但它会一次又一次地发送消息文本。这个代码有什么问题 boolean i = true; do { i = false; try { System.out.println("insert number"); int k = sc.nextInt(); } cat

我有一个不工作的
do while
循环。当我输入一个字符串而不是int时,它应该说“bla”并再次要求插入一个数字,但它会一次又一次地发送消息文本。这个代码有什么问题

    boolean i = true;
    do {
       i = false;  

       try {
           System.out.println("insert number");
           int k = sc.nextInt();  
       }
       catch(InputMismatchException e) {
           System.out.println("test");
           i = true;
       } 
   } while ( i== true);

您需要在
catch
块中执行
sc.nextLine()
,以清除错误的输入。如果输入与int模式不匹配,则调用会将其保留在缓冲区中。

您需要在
catch
块中执行
sc.nextLine()
,以清除错误的输入。如果输入与int模式不匹配,则调用会将其留在缓冲区中。

请参阅:
当扫描器抛出InputMismatchException时,扫描器不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。
。因此,您需要在获得
InputMismatchException
后跳过令牌。请参阅:
当扫描仪抛出InputMismatchException时,扫描仪将不会传递导致异常的令牌,以便可以通过其他方法检索或跳过它。
。因此,一旦您获得
输入不匹配异常
,您就需要跳过令牌。这真的很有帮助:D非常感谢!提示:我已经是一个布尔值了,所以你不需要(i==true)。相反,我用的是while,这真的帮了我:谢谢你!提示:我已经是一个布尔值了,所以你不需要(i==true)。而是使用while(i)。