我想用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
感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
再创建两个数组ns
和ms
,每个数组长四个元素。在for循环中,创建另一个嵌套的for循环,该循环遍历所有四个元素,例如索引为j
。
if (colorsArray[j] == userArray[i])
ns[j]++;
if (colorsArray[j] == randomArray[i])
ms[j]++;
然后再完成一个for循环,计算两个数组ns
和ms
的每个元素之间的最小值。