在java中的Mastermind - 正确的颜色在错误的位置

时间:2015-01-12 18:05:33

标签: java

我想用Java编写Mastermind。

代码工作(显然),但有没有办法以较短的方式编码“正确的颜色在错误的位置”(白色)而不是我做过的(实际列出每种颜色)?也许是另一个循环?

如果你需要知道白色的公式,我在这里找到了它:Mastermind formula

public class Game {

private static int white = 0;
private static int colors = 4;

static int[] colorsArray = {
    1,2,3,4
};
static int[] randomArray = new int[colors];
static int[] userArray = new int[colors];

static int isWhite(int[] randomArray, int[] userArray){

    int n1, n2, n3, n4 =0;      
    int m1, m2, m3, m4 =0;

    //HERE'S THE PROBLEM
    for(int i=0; i<colorsArray.length; i++){

        //n userArray
        if(colorsArray[0] == userArray[i]){
            n1++;
        }
        if(colorsArray[1] == userArray[i]){
            n2++;
        }
        if(colorsArray[2] == userArray[i]){
            n3++;
        }
        if(colorsArray[3] == userArray[i]){
            n4++;
        }

        //m randomArray
        if(colorsArray[0] == randomArray[i]){
            m1++;
        }
        if(colorsArray[1] == randomArray[i]){
            m2++;
        }
        if(colorsArray[2] == randomArray[i]){
            m3++;
        }
        if(colorsArray[3] == randomArray[i]){
            m4++;
        }

        white = (Math.min(n1, m1) + Math.min(n2, m2) + Math.min(n3, m3) + Math.min(n4, m4)) - black;
    }
    return white;
}
...other code

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

再创建两个数组nsms,每个数组长四个元素。在for循环中,创建另一个嵌套的for循环,该循环遍历所有四个元素,例如索引为j

if (colorsArray[j] == userArray[i])
    ns[j]++;

if (colorsArray[j] == randomArray[i])
    ms[j]++;

然后再完成一个for循环,计算两个数组nsms的每个元素之间的最小值。