-1

私は、コンピューターが生成するランダムな 4 桁の整数を推測する必要があるゲームであるプログラムを作成しています。入力の検証に問題があります。より具体的には、userGuess からのすべての入力が数字 0 ~ 9 であることを確認することを目的とした isDigit() メソッドです。

    private static boolean isDigit(char indexPos) { // verifies if the input char is a digit 0-9 or not
        if(indexPos == 0 || indexPos == 1 || indexPos == 2 || indexPos == 3 || indexPos == 4 || indexPos == 5 || indexPos == 6 || indexPos == 7 || indexPos == 8 || indexPos == 9) {
            return true;
        }
        else {
            return false;
        }
    }

次のようなものをハードコーディングすると

isDigit(1)

true として評価されますが、変数をプラグインすると false が返されます。主に、userGuess のすべてのインデックス位置が 0 ~ 9 の数字であっても、これは false を返します。

isDigit(userGuess.charAt(i)) // returns false even when index pos i is [0-9]

なぜこのようなことが起こるのか、私は完全に混乱し、困惑しています。コンテキストについては、検証のための if および for ループの状況全体を次に示します。

numGuess++;
System.out.print("Guess " + numGuess + ": ");
userGuess = kbd.nextLine();
System.out.println("DEBUG: userGuess.length() : " + userGuess.length());

// validate that the input is a valid input (a 4 digit natural number, incl 0000)
if(userGuess.length() < 4 || userGuess.length() >= 5){
   System.out.println("Please enter a valid input, which is a 4 digit natural number (postive integer, including 0000).");
}
else if(userGuess.length() == 4) {
   for(int i = 0;  i <= 3; i++) {
     if(isDigit(userGuess.charAt(i)) == true) { 
        validateCount++;
     }
}

userGuess.length() == 4の場合の検証についても、同じ問題であると想定しています。コンソールにuserGuess.legnth()を出力すると、正しい数値が提供され、== 4の場合、これ条件が満たされているにもかかわらず、ループが実行されない場合:

if (userGuess.length() < 4 || userGuess.length() >= 5) {
   System.out.println("Please enter a valid input, which is a 4 digit natural number (postive integer, including 0000).");
} else if (userGuess.length() == 4) { // avoid out of bounds errors for inputs less than 4 digits
   for (int i = 0; i <= 3; i++) { // userGuess will never have an index above 3, as it is a 4 digit number
if (isDigit(userGuess.charAt(i)) == true && userGuess.length() == 4) { // verify that the userInput is a 4 digit integer
    validateCount++;
}
4

2 に答える 2