2

私は牛や雄牛のようなJavaゲームをやっています。ただし、「Cow」と「Bull」を表示する代わりに、「MOO」または「moo」を表示します。4桁の数字が生成され、ユーザーはそれを推測できます。正しく指定された桁(同じ番号、同じ位置)ごとに、画面に「MOO」が表示されます。同じ番号であるが位置が間違っていると推測される各桁に対して、「moo」が表示されます。返される「moo」の数を返すメソッドを実行するのに問題があります。

public int getLittleMooCount(int guess)
{
    int count = 0;
    String guessString = Integer.toString(guess);
    String randomValueString = Integer.toString(randomValue);

    // Pads the number with zero if less than 4 digits, so length is always 4
    while(guessString.length() < 4)
    {
        guessString = "0" + guessString;
    }

    while(randomValueString.length() < 4)
    {
        randomValueString = "0" + randomValueString;
    }

    // checking to see if positions EXACTLY match. If so, it would return a MOO (the getBigMoo
    // Count is in my other method)
    for (int i = 0; i < 4; i++)
    {
        if (guessString.charAt(i) == randomValueString.charAt(i))
        {
            randomValueString = randomValueString.replace(randomValueString.charAt(i), 'X');
            guessString = guessString.replace(guessString.charAt(i), 'O');
        }
    }

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (guessString.charAt(j) == randomValueString.charAt(i))
            {
                count++;
                randomValueString = randomValueString.replace(randomValueString.charAt(i), 'X');
                guessString = guessString.replace(guessString.charAt(j), 'O');
            }

        }
    }

    return count;
}
  1. テスト用の入力
    1. 0011
    2. 2233
    3. 4455
    4. 6677
    5. 8899
    6. 1234
    7. 5678
    8. 9090

そして、5509の乱数を使用した結果

  1. 1moo=正解
  2. 何もない=正しい
  3. 1 moo =間違っています!2つのモーである必要があります。
  4. 何もない=正しい
  5. 1MOO=正解
  6. 何もない=正しい
  7. 1MOO=正解
  8. 2moo=正解

一部の数値では機能するように見えますが、他の数値では、常に1つの間違ったテストデータがあります。明らかに、何かが間違っていますが、私はすべてを試しました、そしてそれはイライラします!役立つ場合は、別の例を投稿できます。

よろしくお願いします!

編集:申し分なく、私はそれを文字配列に変更しました、そして今それは何もしません。私はこれを正しくやったと誓うことができました。

int count = 0;
    String guessString = Integer.toString(guess);
    String randomValueString = Integer.toString(randomValue);

    char [] randomValueCharacter = randomValueString.toCharArray();
    char [] guessCharacter = guessString.toCharArray();


    while(guessString.length() < 4)
    {
        guessString = "0" + guessString;
    }

    while(randomValueString.length() < 4)
    {
        randomValueString = "0" + randomValueString;
    }

    for (int i = 0; i < 4; i++)
    {
        if (guessString.charAt(i) == randomValueString.charAt(i))
        {
            randomValueCharacter[i] = 'X';
            guessCharacter[i] = 'O';
        }
    }

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (guessString.charAt(j) == randomValueString.charAt(i))
            {
                count++;
                randomValueCharacter[i] = 'X';
                guessCharacter[j] = 'O';
            }

        }
    }

    return count;
}
4

1 に答える 1

4

これはString.replace()が原因です。この関数は、想定どおりに特定の位置にある文字を置き換えるのではなく、指定された文字のすべての外観を置き換えます。したがって、最初の5が見つかった後、両方の5がxに置き換えられます。

JavaDoc

public String replace(char oldChar、char newChar)この文字列内で出現するすべてのoldCharをnewCharに置き換えた結果の新しい文字列を返します。このStringオブジェクトによって表される文字シーケンスに文字oldCharが含まれていない場合、このStringオブジェクトへの参照が返されます。それ以外の場合は、oldCharのすべての出現がnewCharの出現に置き換えられることを除いて、このStringオブジェクトによって表される文字シーケンスと同一の文字シーケンスを表す新しいStringオブジェクトが作成されます。

例:

「セラーのメスキート」.replace('e'、'o')は「首輪の蚊」「準男爵の戦争」を返します。replace('r'、' y')は「銃剣の道」「スパーリング」を返します。紫色のネズミイルカと".replace('p'、't')は"カメのカメと主演"" JonL ".replace(' q'、' x')は" JonL "(変更なし)を返しますパラメーター:oldChar-古いキャラクター。newChar-新しい文字。戻り値:oldCharが出現するたびにnewCharに置き換えることにより、この文字列から派生した文字列。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html

代わりに整数配列を使用できます。


これを試して

    int count = 0;
    String guessString = Integer.toString(4455);
    String randomValueString = Integer.toString(5509);

    char [] randomValueCharacter = randomValueString.toCharArray();
    char [] guessCharacter = guessString.toCharArray();


    while(guessString.length() < 4)
    {
        guessString = "0" + guessString;
    }

    while(randomValueString.length() < 4)
    {
        randomValueString = "0" + randomValueString;
    }

    for (int i = 0; i < 4; i++)
    {
        if (guessCharacter[i] == randomValueCharacter[i])
        {
            randomValueCharacter[i] = 'X';
            guessCharacter[i] = 'O';
        }
    }

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (guessCharacter[j] == randomValueCharacter[i])
            {
                count++;
                randomValueCharacter[i] = 'X';
                guessCharacter[j] = 'O';
            }

        }
    }

    return count;
}
于 2013-02-14T00:44:14.563 に答える