Mastermind Java计算“白人”

时间:2015-12-30 01:07:10

标签: java

我似乎无法弄清楚为什么有时我检查mastermind中白人的代码会计算两次值。我的意思是它计算白色和黑色的值。但是,有时它完美无缺,每次点击都无法实现错误,我无法找到原因。

这是我的方法比较(),它比较我的两个数组guess []为玩家输入的值和解决[]为随机值。

public void comparaison(){
    white = 0;
    black = 0;
    test = new boolean[columns]; 
    for(int x = 0 ; x < test.length ; x++){
        test[x] = false;
    }
    for (int i =0 ; i<columns; i++){
        System.out.println(solution[i]);
        if (solution[i] == guess[i]){
            test[i] = true;
            black++;
        }else{  
            for (int j=0;j < columns;j++){
                if(!test[j] && j!=i && guess[j] == solution[i]){
                    white++; 
                    test[j]=true;
                    break; 
                }
            }   
        }
    }

    System.out.println("black"+black);
    System.out.println("white"+white);

}

之前声明并初始化了2个数组,当玩家点击代表颜色的按钮时,它们被填充(参见image)。 test []数组也在之前声明。

1 个答案:

答案 0 :(得分:1)

如果在放置好的颜色之前放置了错误的颜色,则会出现此问题,例如:

           1 2 3 4
Solution : A A B B
Guess    : B B B B
  • 1:B匹配白色和3
  • 2:B匹配白色与4
  • 3:B再次与黑色匹配
  • 4:B再次与黑色匹配

在为白人做另一次传球之前,你可能需要检查黑人。

修改新代码应如下所示:

for (int i=0 ; i<columns ; i++) {
    if (solution[i] == guess[i]) {
        test[i] = true;
        black++;
    }
}

for (int i=0 ; i<columns ; i++) {
    if (solution[i] != guess[i]) {
        for (int j=0 ; j<columns ; j++) {
            if(!test[j] && j!=i && guess[j] == solution[i]) {
                test[j] = true;
                white++; 
                break;
            }
        }
    }   
}