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

有一个自己写代码时的问题

while (true) {

try {

player1.ID = console.nextInt();

} catch (Exception e) {

System.out.println("请输入数字ID!");

continue;

// TODO: handle exception

}

break;

}

这里定义的player1.ID是int型的,希望达到的效果是输入非数字型时提示用户“请输入数字ID”,通过continue进行下一轮循环以便重新输入,可是这个代码当我输入非数字时,程序不断的循环打出“请输入数字ID”,无限循环,直接跳过 了输入步骤,这是为什么呢?

正在回答

3 回答

0.0,,这就不是回复楼了吧   233333

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

Edward_Xie 提问者

哈哈,非常感谢!
2016-08-11 回复 有任何疑惑可以回复我~

用Scanner接收键盘输入的值,如果发生异常会一直返回这个异常值,这里要用String接收然后转成int.

try {

String str = console.next();

int id = Integer.parseInt(str);

} catch (Exception e) {

System.out.println("请输入数字ID!");

continue;

}


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

Edward_Xie 提问者

谢谢,用你的方法问题解决了。 还有些问题想和你讨论下,为什么scanner会一直返回异常值?我自己查的另一种代码也成功实现了,我原来的代码的console是在类的构造方法中初始化的, 这段代码主要就是每次输入都先console=new Scanner(System.in);然后就不会自己一直无脑循环了,是不是因为出现异常后异常值会保存在console中?然后每次都开辟新的空间给console,就可以相应的避免上一次的异常值?
2016-08-11 回复 有任何疑惑可以回复我~
#2

Edward_Xie 提问者 回复 染红_街道

非常感谢!全弄懂了!不过回复楼要怎么采纳。。
2016-08-11 回复 有任何疑惑可以回复我~

因为try是执行一个方法,catch只是捕获异常,不要用coutinue,要实现你的功能,你可以在catch块里加一个if判断,然后直接抛出一个异常,然后用finally来处理。代码修改如下:

public  void 类(){

try {

int player1.ID = console.nextInt();

if(//你自己实现判断,输入的不是数字){

Exception e=new Exception();

throw e;

}

} catch (Exception e) {

System.out.println("请输入数字ID!");


}finally{

类  对象名 =new 类();   //在本类中创建一个对象

对象名.类();

}


}


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

小黄弟弟斗鱼710373直播lol

如果你继续要用while循环,你也可以再用一个finally块,试试把coutinue放在finally块里
2016-08-10 回复 有任何疑惑可以回复我~
#2

Edward_Xie 提问者 回复 小黄弟弟斗鱼710373直播lol

不行,我的关键就在于我要使用while循环直到输入正确,finally里的东西一定会执行,continue放进去就会无限循环了,break变成不可达
2016-08-11 回复 有任何疑惑可以回复我~
#3

染红_街道 回复 Edward_Xie 提问者

catch语句块跳回循环之前加一句 next(); 把储存在缓冲区的非数字数据给清除掉,然后就可以了 你试试
2016-08-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有一个自己写代码时的问题

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