ユーザー入力を 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 として表される入力が受け入れられ、変数として保存されるようにする方法があるかどうか疑問に思っています。この基準を満たさないすべての入力は、入力がこの基準を満たすまで繰り返されるプロンプトをトリガーする必要があります。助言がありますか?