关于输入整数的异常处理

关于输入整数的异常处理

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

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

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

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

正在回答

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

3回答

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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