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

java小白,为什么这里会陷入死循环?!

java小白,为什么这里会陷入死循环?!

blackbamboo 2016-06-01 22:16:05
public class ExceptionDemo{     public static void main(String[] args){         Scanner input=new Scanner(System.in);         int temp=0;         int i=0;         //输入一个数,大于零时重新输入,小于零跳出,输入出现异常时,         //重新输入,并打印警告,但是出现异常时却一直陷入死循环。         while(true){             System.out.println(i++);             System.out.print("请输入一个不大于10的数字:");             try {                 temp=input.nextInt();             } catch (Exception e) {                 System.err.println("请按要求输入!");                 continue;             }             if(temp>9){                 System.err.println("请按要求输入!");                 continue;             }else{                 break;             }         }     } }
查看完整描述

11 回答

已采纳
?
为谁风露_立中宵

TA贡献1条经验 获得超2个赞

scanner在要求用户输入的时候,其实是在内存中保存了用户输入,输入字母等就会存入该段内存。当我们用input.nextInt()调用时,就不能调用出来,因为它不是我们要调用的int类型,这时就会报输入不匹配错误。可是问题就在这儿,我们用input.nextInt()调用没把该段内存中的东西提出来,他就会一直占用这段内存,导致我们二次输入时,就不会再要求用户输入了,他会继续试图调用该段内存数值。

   所以解决办法就是我们清空该段内存,或者把该段内存中的数值取出。所以我们在catch块中使用 input.next(); 就可以解决。因为input.next()是得到字符串所以可以把该段内存中的值取出。因此最终可通过如下方式解决

    try {
	                temp=input.nextInt();
	            } catch (Exception e) {
	            	input.next();
	                System.err.println("请按要求输入!");
	                continue;
	            }

其余的不变!

查看完整回答
2 反对 回复 2016-06-02
?
kstg5944571

TA贡献18条经验 获得超16个赞

while(true)···这是恒成立的,当然一直死循环啦,改成temp>=0试试

查看完整回答
1 反对 回复 2016-06-01
?
不偏不易

TA贡献96条经验 获得超118个赞

要学会Debug

设置断点,并Debug.

一步一步走下去,观察变量。然后就能发现错误。

查看完整回答
2 反对 回复 2016-06-01
  • 252545109
    252545109
    是的,java开发必须要会用debug这是一个专业java程序员必须要有的素质!
  • blackbamboo
    blackbamboo
    就是不会啊,刚学java。
  • 晋强
    晋强
    都死循环了 在设置断点 死完了。。哈哈
?
晋强

TA贡献4条经验 获得超1个赞

在捕获异常中 把continue改为break

查看完整回答
反对 回复 2016-06-02
  • blackbamboo
    blackbamboo
    我要输错重新输入啊!!
  • 晋强
    晋强
    你到底需要什么结果呢 要重输入就把scanner写入while里边呀
?
blackbamboo

TA贡献1条经验 获得超0个赞

我是想在里面的代码中跳出,现在的情况是,一但有异常,就一直循环,不会给我输入的机会。

查看完整回答
反对 回复 2016-06-02
  • blackbamboo
    blackbamboo
    用try...catch是想如果输入数字以外的字符的话程序会终会,如果出现异常就提示一下,然后再从新输入。
?
慕粉3248975

TA贡献8条经验 获得超8个赞

出现异常时,不应该用continue,用break就可以跳出循环了,continue是进入下一次循环

同时你这段程序的代码逻辑有问题

查看完整回答
反对 回复 2016-06-02
?
1255321142

TA贡献2条经验 获得超0个赞

你的代码编译都不通过吧!return后面还有代码?

//img1.sycdn.imooc.com//574f91f900019cf703170105.jpg


查看完整回答
反对 回复 2016-06-02
  • blackbamboo
    blackbamboo
    粘贴复制时出错
  • 司风
    司风
    int i=0; while(true){ i++; if(i>5){break;} } //你说这个是死循环吗?
?
慕用9836023

TA贡献1条经验 获得超0个赞

while (true){}注定是一个死循环


查看完整回答
反对 回复 2016-06-02
  • 11 回答
  • 1 关注
  • 2720 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信