簡體   English   中英

我的代碼進入無限循環,不再提示用戶

[英]my codes goes infinity loop and does not prompts the user anymore

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);

} 

我的問題是,當我輸入一個字母時,它進入一個無限循環,它不會提示用戶輸入數量....這是

輸入數量:數量無效請輸入數字!

輸入數量:數量無效請輸入數字!

輸入數量:無效數量請輸入數字!......

您忘記閱讀下一行的\\n (或\\r\\n )字符。 在您當前的代碼中,掃描程序正在等待int輸入,當前的下一個輸入是此分隔行char。 只需在代碼中添加sc.nextLine()即可使用break行char:

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

從我可以收集的信息來看,你的掃描儀(sc)似乎正在拋出異常。 這會導致acceptQty一直是假的,讓你陷入內在的do-while循環中。

您需要在異常塊中使用任何非法字符,否則Scanner#nextInt方法調用將不會使用它們,導致循環無限重復:

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

在讀出sc時你會遇到異常,所以它總是進入無限循環。 你可以粘貼sc中的值嗎?

我相信你做錯了。 您的驗證方法非常模糊,可以簡化。 假設您有以下方法:

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 ,它將調用相同的方法(遞歸)。

取出兩個循環,當您想要從Scanner讀取int ,請執行以下操作:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM