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

做了个简单小例子测试异常,非常吊诡的是如果输入非整形,就会陷入死循环,一直车轱辘提示无效要求重输,但又不给我机会重输,只是自己一个劲儿车轱辘。我明明在do循环里有输入动作啊,为啥只执行第一次,后面就一直跳过直接到catch呢?

package prj7;
import java.util.Scanner;

public class ExcepTest {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        boolean inputFlag = false;
        int id;
        System.out.println("Please input a number:");
        
        do{
            try{
                id = input.nextInt();
                inputFlag = true;
            }catch (Exception e){
                System.out.println("The input must be an integer,please try again");
            }
        }while (inputFlag==false);
        
        System.out.println("your input is correct!");
    }
}

正在回答

2 回答

另外这个死循环问题我已经解决了,之所以出现循环是一旦input.nextInt()报错,系统会跳过下一个输入,于是就会陷入死循环。解决办法,是把Scanner input = new Scanner(System.in)这句放到try里面去

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

  try{
                id = input.nextInt();
                inputFlag = true;

这个位置没有比较怎么判断对错呀?需要加一个判断才行;

while (inputFlag==false);

这句话是多余的,本来就赋给inputFlag的值就是false。

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

红袖侍读 提问者

擦汗,我这个小测试是要求用户输入整数,如果不是就循环,让用户不停输入直到一个整数为止。inputflag是用来控制循环的,如果id=input.nextInt()输入是整数,就会执行下一句给inputflag赋值为真,于是跳出do-while循环,否则就保持inputflag为假,始终在循环体里。同时,input.nextInt()如果输入的是非整数,系统会自动认为异常,并不需要我们判断就会自动跳到catch语句。
2016-06-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

做了个简单小例子测试异常,非常吊诡的是如果输入非整形,就会陷入死循环,一直车轱辘提示无效要求重输,但又不给我机会重输,只是自己一个劲儿车轱辘。我明明在do循环里有输入动作啊,为啥只执行第一次,后面就一直跳过直接到catch呢?

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