有关Java中try catch无法在while循环中使用的情况

时间:2022-12-13 16:37:02
import java.util.*;
public class scanner
{
    static boolean flag=true;
    static int x;
    public static void main(String[] args)
    {
        Scanner input=new Scanner(System.in);
        while(flag)
        {
            try
            {
                System.out.println("key in a integer");
                x=input.nextInt();
                flag=false;
            }
            catch (InputMismatchException e)
            {
                System.out.println("Only Integer,try again");
            }
        }
        System.out.println(x);
    }

}



当输入一个非整数字符时,程序陷入了死循环,求教

8 个解决方案

#1


看看你try里面写得东西
         try
             {
                 System.out.println("key in a integer");
                 x=input.nextInt();
                 flag=false;
             }
之所以死循环是因为try中的这句话 flag=false;之前报错,也就是 System.out.println("key in a integer");
                 x=input.nextInt();
这里面的其中一句有错。因而导致你的 flag一直为true。从而造成了死循环

#2


 try
            {
                System.out.println("key in a integer");
                x=input.nextInt();
               
            }
            catch (InputMismatchException e)
            {
                System.out.println("Only Integer,try again");
 flag=false;
            }

#3


我的意思是想说,为什么程序在再次执行try语句时没有在x=input.nextInt()这一句停下来,而是陷入了死循环
我就是想让当程序输入不是整数时一直循环,等待下次输入

#4


如果你想做这种功能的话,可以通过线程Thread试试

#5


那对于这个死循环的问题该怎么解释呢?

#6


写在try{      }里面的代码如果其中某句代码出错,这句错误代码后面的代码都不会被执行到,然后会直接执行catch{       }中的代码

#7


懂了,谢谢了

#8


本萌新今天也发现了这个问题,问老师后发现是scanner底层代码有问题,用bufferedreader就没问题了。。

#1


看看你try里面写得东西
         try
             {
                 System.out.println("key in a integer");
                 x=input.nextInt();
                 flag=false;
             }
之所以死循环是因为try中的这句话 flag=false;之前报错,也就是 System.out.println("key in a integer");
                 x=input.nextInt();
这里面的其中一句有错。因而导致你的 flag一直为true。从而造成了死循环

#2


 try
            {
                System.out.println("key in a integer");
                x=input.nextInt();
               
            }
            catch (InputMismatchException e)
            {
                System.out.println("Only Integer,try again");
 flag=false;
            }

#3


我的意思是想说,为什么程序在再次执行try语句时没有在x=input.nextInt()这一句停下来,而是陷入了死循环
我就是想让当程序输入不是整数时一直循环,等待下次输入

#4


如果你想做这种功能的话,可以通过线程Thread试试

#5


那对于这个死循环的问题该怎么解释呢?

#6


写在try{      }里面的代码如果其中某句代码出错,这句错误代码后面的代码都不会被执行到,然后会直接执行catch{       }中的代码

#7


懂了,谢谢了

#8


本萌新今天也发现了这个问题,问老师后发现是scanner底层代码有问题,用bufferedreader就没问题了。。