Java实现正整数的输入,否则输出提示信息继续输入

很多初学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);
	}

}

如果帮你解决了问题,希望有缘人你能给点赞支持一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值