簡體   English   中英

如何使該程序檢查輸入是否為 integer 而不會導致運行時錯誤並使用標記值停止循環?

[英]How do I make this program check if an input is an integer without causing an error in runtime and stop the loop with a sentinel value?

我一直在嘗試從我的程序中根除運行時錯誤,因為它正在檢查用戶輸入是否是 integer,如果不是,則打印出錯誤消息,並要求另一個輸入是 integer。 我還注意到,通過檢查 integer 現在我的程序不斷要求更多輸入,而不是在用戶輸入負 integer 時停止循環。 這是我的程序代碼中有問題的部分:

do
    {
        System.out.println("Enter an integer grade percentage: ");
        examScore = keyboard.nextInt();
        if (examScore != (int)examScore) {
            System.out.println("Not an integer, please try again.");            
                
            if (examScore >= 90 && examScore <=100) {
                gradeA++;
                totalScores++;
            }
            else if (examScore >= 80 && examScore <=89) {
                gradeB++;
                totalScores++;
            }
            else if (examScore >= 70 && examScore <=79) {
                gradeC++;
                totalScores++;
            }
            else if (examScore >= 60 && examScore <=69) {
                gradeD++;
                totalScores++;
            }
            else if (examScore >=0 && examScore <= 59)
                gradeF++;
                totalScores++; 
            }
        else {
            if (examScore >= 90 && examScore <=100) {
                gradeA++;
                totalScores++;
            }
            else if (examScore >= 80 && examScore <=89) {
                gradeB++;
                totalScores++;
            }
            else if (examScore >= 70 && examScore <=79) {
                gradeC++;
                totalScores++;
            }
            else if (examScore >= 60 && examScore <=69) {
                gradeD++;
                totalScores++;
            }
            else if (examScore >= 0 && examScore <=59)
                gradeF++;
                totalScores++;           
            }
        }while(examScore >=0);

感謝所有幫助!

您在最后一個else if上缺少一個開頭{

nextInt()返回一個int那么if (examScore != (int)examScore) {什么意義?

您可以使用Scanner.hasNextInt()檢查用戶是否輸入了 integer。 如果沒有,請使用輸入並重試。

您可以利用以下事實來簡化等級條件:在if/else if/else中,一旦執行一個塊,就會跳過 rest。

while (true) {
    System.out.println("Enter an integer grade percentage: ");
    do {
        // Check for integer
        while (!keyboard.hasNextInt()) {
            // Not an int? Consume and discard
            String input = keyboard.next();
            System.out.println("Not an integer, please try again.");
        }
        examScore = keyboard.nextInt();
    } while (examScore > 100); // Only except if in range
    if (examScore >= 90) {
        gradeA++;
    }
    else if (examScore >= 80) {
        gradeB++;
    }
    else if (examScore >= 70) {
        gradeC++;
    }
    else if (examScore >= 60) {
        gradeD++;
    }
    else if (examScore >= 0) {
        gradeF++;
    }
    else {
        // Must be negative
        break;
    }
    totalScores++; 
}

約翰尼莫普的答案中借用了驗證

    public static void main(String[] args) {
        final int[] scoreLimits = new int[]{90, 80, 70, 60, 0}; // this should be in descending order
        final int[] gradeCount = new int[scoreLimits.length];
        final char[] gradeLabel = new char[]{'A', 'B', 'C', 'D', 'F'};
        final Scanner keyboard = new Scanner(System.in);

        System.out.println("Enter an integer grade percentage between 0 and 100(both inclusive). Enter -1 to stop");
        while (true) {
            int examScore;
            do {
                // Check for integer
                while (!keyboard.hasNextInt()) {
                    // Not an int? Consume and discard
                    String input = keyboard.next();
                    System.out.println("Not an integer, please try again.");
                }
                examScore = keyboard.nextInt();
            } while (examScore != -1 && (examScore < 0 || examScore > 100)); // Only except if in range

            if (examScore == -1) {
                break;
            }

            for (int i = 0; i < scoreLimits.length; i++) {
                if (examScore >= scoreLimits[i]) {
                    ++gradeCount[i];
                    break;
                }
            }
        }
        System.out.println(Arrays.toString(gradeCount));
    }

暫無
暫無

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

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