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。从而造成了死循环
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;
}
{
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。从而造成了死循环
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;
}
{
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就没问题了。。