我的代码进入无限循环,不再提示用户

时间:2014-02-07 15:35:23

标签: java exception-handling boolean do-while

boolean acceptPcode=true;
boolean acceptQty=false;
int Qty=0;
List<Integer> purchasedProdQty=new ArrayList<>();

while(acceptPcode==true && acceptQty==false){
        do{
            try{
                 System.out.print("Enter Qty: ");
                    Qty=sc.nextInt();
                    acceptQty=true;                 
              }catch(InputMismatchException ime){
                    System.out.println("Invalid quantity please enter a number!");
                    acceptQty=false;
              }

                    if(acceptQty==true)
                    purchaseProdQty.add(Qty);

           }while(acceptQty==false);

} 

我的问题是,当我输入一个字母时,它进入无限循环并且它不会提示用户输入数量....这是

输入数量:数量无效请输入数字!

输入数量:数量无效请输入数字!

输入数量:数量无效请输入数字!......

5 个答案:

答案 0 :(得分:3)

您忘记阅读下一行的\n(或\r\n)个字符。在您当前的代码中,扫描程序正在等待int输入,当前下一个输入是此分隔线char。只需在代码中添加sc.nextLine()即可使用中断行char:

Qty=sc.nextInt();
sc.nextLine();
acceptQty=true;

答案 1 :(得分:0)

从我可以收集的内容来看,您的扫描仪(sc)似乎正在抛出异常。这会导致acceptQty一直是假的,让你陷入内在的do-while循环中。

答案 2 :(得分:0)

您需要在异常块中使用任何非法字符,否则Scanner#nextInt方法调用将不会使用它们,导致循环无限期地重复:

} catch(InputMismatchException ime) {
    System.out.println
      ("Invalid quantity: " + sc.nextLine() + " please enter a number ");
    ...
}

答案 3 :(得分:0)

你在读出sc时遇到异常,所以它总是进入无限循环。你能粘贴sc中的值吗?

答案 4 :(得分:-1)

我相信你这样做是错的。您的验证方法非常模糊,可以简化。假设您有以下方法:

public int readNumber(final String prompt, final Scanner scanner){
    System.out.println(prompt);
    try{
        return scanner.nextInt();
    }catch(Exception ex){
        System.err.println("Enter a valid number");
        return readNumber(prompt, scanner);
    }
}

此方法将打印出提示符(第一个参数)并从提供的Scanner(第二个参数)中读取输入。如果用户输入的内容无法解析为int,则会调用相同的方法(递归)。

取出两个循环,当您想要从int阅读Scanner时,请执行以下操作:

int value = readNumber("Enter a quantity", sc);

您肯定知道Integer.MAX_VALUE >= value >= Integer.MIN_VALUE