关于输入整数的异常处理

关于输入整数的异常处理

http://img1.sycdn.imooc.com//climg/5c46df2c0001be3105390271.jpg

我想通过这么一个方式确保用户从键盘里输入的是整数,输入类型不符合时能再次输入,知道符合位置,可实际运行的时候:

http://img1.sycdn.imooc.com//climg/5c46df790001afaf07311047.jpg

程序会无限循环~此时我该怎么做?望指教

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

你好小伙伴,针对你的代码进行了修改,也添加了适量的注释,同学可以看一下哦,如果有不理解的地方可以继续提问哦,祝学习愉快~

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int index;
        boolean flag = false;
        do {
            try {
                System.out.println("请输入一个整数");
                index = sc.nextInt();
                flag=false;//输入正确的数据退出循环
            } catch (Exception e) {
                flag = true;
                sc.nextLine();// 这里是为了接受处理字符串的代码,接受了异常的变量,才能继续录入整型变量
            }
        } while (flag);
    }


  • 您好,不太理解接受处理字符串代码是什么意思,望指教!
    2019-01-23 11:14:43
  • 你好同学,可以从程序的运行流程去理解,当用户输入一个字符串时,会走try块中的代码,nextInt方法是接收整型数据的方法,如果当用户录入一个字符串的nextInt方法会抛出异常,然后开始执行第二次循环,那么用户录入的字符串还是会走try块中的nextInt方法,接着抛出异常,造成死循环。所以就需要用能接收字符串的方法来接收字符串,那么在catch语句中,使用nextLine方法用来接收这个字符串,然后在让用户重新录入整数就可以了,祝学习愉快~
    2019-01-23 13:55:38
提问者 爱动脑筋的小伙伴 2019-01-22 20:51:35


	do {
			mainMenu();
			boolean flag;
			do {
				flag=false;
				try {
					index=sc.nextInt();
				} catch (Exception e) {
					e.printStackTrace();
					System.out.println("请输入一个整数");
					flag=true;
					sc=new Scanner(System.in);//为什么这里需要new多一次?(否则输入一个非整数,会无限循环)
				}
			}while(flag);


chrismorgen 2019-01-22 18:10:32

建议同学将你的代码粘贴到我要回答中,不要粘贴到回复汇总,否则会失去代码格式,这样方便老师进调试并具有针对性的为你解答,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师