1

私はJavaプログラミングの初心者です。今はmastermindというゲームをやっています。

多くの条件があり、色の代わりに数字を使用しています。

この問題を解決する方法がわかりません: if else ステートメントを使用してゲームを実行していますが、解決策が 4444 でユーザー入力が 4444 の場合、出力の回答は間違っています。

このゲームでは、最初の入力はコンピューターで生成されますが、プログラムをテストする必要があるため、自分で数値を設定し、2 番目の入力はプレイヤーの入力です。

ここに私がやったコードがあります:

import javax.swing.JOptionPane;


public class asd {


    public static void main (String args[]){
        int i,j;
        int b=0 ,w=0;

    String input[] = new String[4];
    input[0] = JOptionPane.showInputDialog("input a digit");
    input[1] = JOptionPane.showInputDialog("input a digit");
    input[2] = JOptionPane.showInputDialog("input a digit");
    input[3] = JOptionPane.showInputDialog("input a digit");

     String Uinput[] = new String[4];
     Uinput[0] = JOptionPane.showInputDialog("input a digit");
     Uinput[1] = JOptionPane.showInputDialog("input a digit");
     Uinput[2] = JOptionPane.showInputDialog("input a digit");
     Uinput[3] = JOptionPane.showInputDialog("input a digit");

     for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            if(i<4){
            if(input[i].equals(Uinput[j])){
                if(i==j){
                    b++;
                    i++;
                    j=0;
                }else{
                    w++;


                }
            }
            }
        }
     }
     System.out.println("black = "+b+"\nwhite = "+w);

}
}
4

2 に答える 2

4

わかりました、いくつかの提案をします。

まず、入力ごとに単一の文字列を使用するか (Dave が提案したように)、char 配列を使用します。4 文字の文字列の配列は必要ありません。

あなたの「正しい」チェックは複雑すぎます。ループ内でループ変数を変更しているため、実際に何が起こっているのかを解読するのが難しくなっています。

編集

アルゴリズムを 2 フェーズ 1 に変更します。最初のフェーズでは、配列を調べて、正しい場所にある正しい数字のみをチェックします。これが黒のペグ数になります。

次に、次の段階で、アレイをもう一度調べて、正しい番号と間違ったスポット (ホワイト カウント) をチェックします。注意が必要なのは、重複の処理です。たとえば、実際の数が「1234」で「4445」と推測した場合、白いペグは 1 つしか得られないはずです。数値が実際の値に存在するかどうかを単純に確認することはできません。

これに対処するために、私が考えることができる最も簡単な方法は、いつ数値を計算したかを追跡するブール配列を作成することです。だから、これが私の「黒」フェーズがどのように見えるかです:

char[] actual = // Read in the real value
char[] guess = // Read in the users guess

int blackCount = 0;
int whiteCount = 0;

boolean[] isFound = new boolean[4];

// Black phase
for (int i = 0; i < 4; ++i)
{
  if (actual[i] == guess[i])
  {
    isFound[i] = true;
    blackCount++;
  }
}

ここで、白いフェーズを追加します。数値が存在し、isFound[i​​] 値 = false の場合にのみ、白いペグが得られます。

それが役立つことを願っています

于 2012-07-04T14:11:32.953 に答える
1

首謀者のルールについてはよくわかりませんが、指定していませんでしたが、おそらくこれがあなたの言いたいことです:

    int b = 0, w = 0;
    for (int i = 0; i < 4; i++)
    {
        if(input[i].equals(Uinput[i])) ++b;
        else ++w;
    }
于 2012-07-04T14:20:08.960 に答える