很多初学Java的同学,输入一个整数只会用Scanner
类的nextInt()
函数。可是不管用啊!输入其他的话,编译器直接报错,不让运行了。
作为经常使用C++的我就很困惑,有没有办法让它能正确顺利运行处理问题呢?
我就想使用处理异常的try-catch
语句,配合do-while
语句,结果就:
无限循环了!!!
解决方法:
问题其实就出现在try-catch
,当 scanner 的 nextXXX() 方法触发了 InputMismatchException 异常,输入的值还残留在缓冲区,当下次x=in.nextInt();
再次运行时,会把缓冲区的数据再次读一遍,造成无限循环。
怎么办呢?在C/C++我们也遇过读缓冲区数据的情况,我们加一句getchar();
吸收换行符就行了,那么这里也同理。我们也加一句。
in.nextLine();或者in.next();就可以了。
上代码:(有详细注释)
import java.util.InputMismatchException;
import java.util.Scanner;
public class solve {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入一个十进制正整数:");
Scanner in=new Scanner(System.in);
String xx;//给后面测试的
int x=0;
do {
try
{
x=in.nextInt();
//不是整数断了去执行catch()
if(x<=0)
System.out.println("请输入一个正整数");
}
catch(InputMismatchException e)
{
System.out.println("请输入一个正整数:");
in.nextLine();//next()也行 相当于吸收换行符
//xx=in.next();//其实这两个函数就是录入一串字符串,next()不能录入空格,
//在这里只是吸收换行符,相当于C/C++里的 getchar(); 没有将该字符串打印出来罢了
//System.out.println(xx);//打印出来看看
}
}while(x<=0);
System.out.println(x);
}
}
如果帮你解决了问题,希望有缘人你能给点赞支持一下。