0

現在、Javaコースでは、首謀者のようなゲームを作成しようとしています。このゲームでは、4桁の乱数が生成され、ユーザーはその数を推測しようとします。推測するたびに、コンピューターは正しい桁の数が正しい順序であり、正しい桁の数が間違った順序であると述べます。

何らかの理由で、すべてがこのプログラムの私のバイナリ検索まで機能します。これは本当にプログラムの中心です。私はそれを微調整するのに何時間も費やしました、そして私はまだそれを得ることができません。何か案は?

この例では、9935を推測しようとしていますが、これは乱数ではないことがわかります。

本当にありがとう!

編集:このプログラムを実行して推測「9875」を使用すると、正しい結果が得られません。

私が見つける必要がある推測と結果は次のとおりです。

4桁の数字を入力してください:9874

正しい桁数ですが、間違った場所にあります:0

適切な場所の正しい桁数:1

4桁の数字を入力してください:9899

正しい桁数ですが、間違った場所にあります:1

適切な場所の正しい桁数:1

4桁の数字を入力してください:9593

正しい桁数ですが、間違った場所にあります:3

適切な場所の正しい桁数:1

4桁の数字を入力してください:9935

正しい桁数ですが、間違った場所にあります:0

適切な場所の正しい桁数:4

あなたは正しいです!

public class Mastermind {

public static void main(String[] args) {

    Random randomGenerator = new Random();
    Scanner input = new Scanner(System.in);

    int randomNumber = 9935;

    int[] randomArray = new int[4];

    int temp = randomNumber;
    for (int i = 3; i >= 0; i--){
        int n = temp%10;
        randomArray[i] = n;
        temp /= 10;
    }

    boolean found = false;

    while (found == false){

        System.out.print(Arrays.toString(randomArray));
        int[] guessArray = new int[4];
        System.out.print("Please enter a four-digit number: ");
        int guessTemp = input.nextInt();
        for (int i = 3; i >= 0; i--){
            int n = guessTemp%10;
            guessArray[i] = n;
            guessTemp /= 10;
        }

        if (Arrays.equals(randomArray, guessArray)){
            System.out.println("You are correct!");
            found = true;
        } else {

            int numberRightRight = 0;
            int numberRightWrong = 0;
            int indexFound = 0;
            for(int i = 0; i < guessArray.length; i ++){
                System.out.println(randomArray[i]);
                indexFound = Arrays.binarySearch(guessArray, randomArray[i]);
                System.out.println(indexFound);
                if (indexFound >= 0){
                    if(indexFound == i){
                        numberRightRight++;
                    } else {
                        numberRightWrong++;
                    }
                }
            }
           System.out.println("The number of correct digits but in the wrong place: " + numberRightWrong);
           System.out.println("The number of correct digits in the right place: " + numberRightRight);
        }   
    }
}
4

1 に答える 1

1

使用する必要がない場合はArrays.binarySearch(int[], int)、ソートされていない配列に対して独自の単純なルックアップメソッドを使用できます。

public static int findInArray(int[] array, int value) {
  for (int i = 0; i < array.length; i++) {
    if (array[i] == value) {
        return i;
    }
  }
  return -1;
}

Arrays.binarySearch(guessArray, randomArray[i]);今すぐ呼び出す代わりにfindInArray(guessArray, randomArray[i])

于 2012-12-03T23:05:10.403 に答える