簡體   English   中英

java中非數字輸入的無限循環

[英]infinite loop on non-numeric input in java

這是一個簡單的java函數,輸入為double。 它需要一個輸入並首先檢查該值是否為非數字。 然后檢查該值是否大於0。

我面臨的問題是每次輸入非數字輸入時,它都會運行一個無限循環並且只打印"Enter a number greater or equal to 1.0: "

double getInput(double n) {
    Scanner kbd = new Scanner(System.in);
    boolean flag = false;
    boolean check = false;
    while (!flag) {
        System.out.println("Enter a number greater or equal to 1.0: ");
        try {
            n = kbd.nextDouble();
            if (n >= 0 || n < 0)
                check = true;
        } catch (InputMismatchException ex) {
            err.print("Invalid Data Type (not Numeric)");
        }
        if (check == true) {
            if (n < 0)
                System.out.println("Invalid value (too small)");
            else
                flag = true;
        }
    }
    return n;
}

kbd.nextDouble不會消耗換行符,因此會將這些字符重復傳遞到while循環中。

在catch塊中而不是僅拋出異常,您可以傳遞kbd.nextLine(),以便在下一個循環中輸入方法就緒。

catch(InputMismatchException ex)
            {

                System.out.println("Invalid Data Type (not Numeric)");
                kbd.nextLine();
            }

以下是完整的代碼:

double getInput(double n)
    {

        Scanner kbd = new Scanner( System.in );
        boolean flag =false;
        boolean check = false;
        while(!flag)
        {
            System.out.println("Enter a number greater or equal to 1.0: ");
            try
            {

                n = kbd.nextDouble();

                if(n>=0 || n<0)check = true;
            }
            **catch(InputMismatchException ex)
            {

                System.out.println("Invalid Data Type (not Numeric)");
                kbd.nextLine();
            }**

           if(check==true)
           {
               if(n<0)
                System.out.println("Invalid value (too small)");
               else
                   flag = true;
           }
        }
    return n;
    }

從掃描儀讀取雙倍值不會讀取行尾

n = kbd.nextDouble();

所以掃描儀對象將有一些東西要讀取,除非你得到行結束調用

kbd.nextLine();

在異常到來之后完全做到這一點的邏輯點......

 catch (InputMismatchException ex) {
        System.err.print("Invalid Data Type (not Numeric)");
        kbd.nextLine();  ///here!!!
        }

暫無
暫無

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

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