我是java编程的初学者。现在我正在做一个名为mastermind的游戏。
它有很多条件,我使用的是数字而不是颜色。
我不知道如何解决这个问题:我正在使用if else语句来做我的游戏但是如果解决方案是4444并且用户输入是4444,则输出答案是错误的。
在这个游戏中,第一个输入是计算机生成的,但我必须测试程序,所以我自己设置数字,第二个输入是玩家输入。
以下是我所做的代码:
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);
}
}
答案 0 :(得分:4)
好的,我会给你一些建议。
首先我要说每个输入都使用一个String(如Dave建议的那样)或者使用char数组。您不需要4个字符的String数组。
你的“正确”检查太复杂了。您正在修改循环中的循环变量,这使得很难破译实际发生的事情。
修改
我会将算法修改为两阶段算法。第一阶段,我会走过阵列,只检查正确的数字 - 这将是你的黑钉数。
然后,在下一阶段,我将再次遍历阵列,检查正确的数字,错误的点(白色计数)。棘手的是处理重复。例如,如果实际数字是“1234”而我猜“4445”,我应该只得到一个白色挂钩。你不能天真地检查数字是否存在于实际值中。
为了解决这个问题,我能想到的最简单的事情是制作一个布尔数组来跟踪你已经考虑过的数字。所以这就是我的“黑色”阶段的样子:
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] value = false,你只会得到一个白色的钉子。
希望有所帮助
答案 1 :(得分:1)
我不确定主谋规则,你没有说明,但也许这就是你的意思:
int b = 0, w = 0;
for (int i = 0; i < 4; i++)
{
if(input[i].equals(Uinput[i])) ++b;
else ++w;
}