为了账号安全,请及时绑定邮箱和手机立即绑定

请问下我下面的代码为什么会陷入死循环

 while(true){

         try{

        id1=input.nextInt();

        }catch(Exception e){

        System.out.println("请输入整数型数字");

        continue;

        }

         break;

         }


正在回答

7 回答

这几天没看java啦,说实话,我对java也只是一个爱好者

给你看一个之前写的

/**
* 判断输入玩家编号异常值
* @return
* @throws Exception
*/
public int scanInt() throws Exception
{
   try {
       int in = console.nextInt();
       return in;
   } catch (Exception e) {
       console = new Scanner(System.in,"UTF-8");
       throw new Exception("输入异常,请输入整数类型的ID");
   }
}


0 回复 有任何疑惑可以回复我~
#1

sadfiy 提问者

非常感谢!
2017-07-10 回复 有任何疑惑可以回复我~

楼上说的对,你只要改一行就好了

id1=Integer.parseInt(input.nextLine());


0 回复 有任何疑惑可以回复我~

你定义了一个Scanner对象 input吧 如果你已经赋值给他并且非int变量

  循环再运行input.nextInt()方法就不再接收键盘输入    而是直接返回上一次有异常的值,然后继续异常   会无限循环catch块的代码的  

简单说解决方案 可以try内部再新new一个Scanner对象

或者使用楼上的throw 

0 回复 有任何疑惑可以回复我~

http://www.imooc.com/qadetail/199049

0 回复 有任何疑惑可以回复我~

continue是用来继续循环啊,break是跳出循环,如果用return的话后面程序就都不用执行了。

0 回复 有任何疑惑可以回复我~

这个问题你断点调试一下就会发现,当输入不是整形,触发异常的时候,continue一直都在循环中,

改成throw new Exception("输入异常,请输入整数类型数字");就好啦

0 回复 有任何疑惑可以回复我~
#1

sadfiy 提问者

请问为什么会一直都在循环而不能重新输入id1,while的作用是进入下一次循环啊
2017-03-02 回复 有任何疑惑可以回复我~
#2

李东岳 回复 sadfiy 提问者

简单来说,你的continue和break在while循环中没有起到作用,推荐你用return吧
2017-03-02 回复 有任何疑惑可以回复我~
#3

sadfiy 提问者 回复 李东岳

老哥,看2楼,刚点错了。
2017-03-02 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问下我下面的代码为什么会陷入死循环

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信