4

ユーザー入力を 0 から 100 の間の int として取得しようとし、入力がこの基準に一致しない限り、ユーザーに「再試行」するように求めます。

これまでの私のコードは、私の目標を達成するのにある程度成功しています:

import java.util.Scanner;

public class FinalTestGrade
{
    public static void main(String[] args)
    {
        Scanner studentInput = new Scanner (System.in );
        int testGrade;

        System.out.println("Please enter your test grade (0 to 100)");
        while (!studentInput.hasNextInt()) 
            {
            System.out.println("Your input does not match the criteria, please enter a number between 0 and 100");
            studentInput.next();
            }
        testGrade = studentInput.nextInt();

        while (testGrade > 100 || testGrade < 0) 
            {
            System.out.println("Your input does not match the criteria, please enter a number between 0 and 100");
            testGrade = studentInput.nextInt();
            }

ご覧のとおり、プログラムは入力が int であることを確認します。ユーザーが int を正常に入力すると、プログラムは入力が 0 から 100 の間であることを確認します。ユーザーが 2 番目のプロンプト (2 番目の while ループによって開始される) に応答して非 int を入力すると、問題が発生します。以下に例を示します。

run:
Please enter your test grade (0 to 100)
P
Your input does not match the criteria, please enter a number between 0 and 100
109
Your input does not match the criteria, please enter a number between 0 and 100
P
    Exception in thread "main" java.util.InputMismatchException
            at java.util.Scanner.throwFor(Scanner.java:840)
            at java.util.Scanner.next(Scanner.java:1461)
            at java.util.Scanner.nextInt(Scanner.java:2091)
            at java.util.Scanner.nextInt(Scanner.java:2050)
            at finaltestgrade.FinalTestGrade.main(FinalTestGrade.java:24)
Java Result: 1
BUILD SUCCESSFUL (total time: 9 seconds)

簡単に言えば、while ループを組み合わせて、0 から 100 までの int として表される入力が受け入れられ、変数として保存されるようにする方法があるかどうか疑問に思っています。この基準を満たさないすべての入力は、入力がこの基準を満たすまで繰り返されるプロンプトをトリガーする必要があります。助言がありますか?

4

1 に答える 1

1
int testGrade = -1 ;
Scanner studentInput = new Scanner(System.in);
while (testGrade > 100 || testGrade < 0) 
{
   System.out.println("Your input does not match the criteria, please enter a number between 0 and 100");

   while(!studentInput.hasNextInt())
   {
       studentInput.next() ;
   }
   testGrade = studentInput.nextInt();
}

ストリームに無効な文字があるかどうかを確認する無限ループがあります。もしそうなら、それを消費してください、それhasNextInt()が目的です。有効なものを入力すると、そのループは終了します。

于 2012-10-25T23:51:52.463 に答える