比较Java中的数组游戏

时间:2013-01-06 00:49:53

标签: java arrays

我想知道是否有人可以帮助我,我有一个游戏,计算机生成一个随机的4位数代码,每个数字范围从0-5。然后用户猜测这段代码,计算机返回一个我打印成字符串的数组。该数组应该包含猜测中每个数字的6,正确位置的正确数字,猜测中每个数字为7,这是正确的数字,但是错误的数字,最后是5表示任何完全不正确的数字

示例,,如果代码是:0143
并且用户的猜测是:0451
数组应该是:6775

这是因为0完全正确,1和4在代码中,但是在错误的位置猜测,并且5完全不正确。此外,每个数字都在数组的单独部分中。

这是我到目前为止所做的:

for (int i = 0; i < 4; i++) { 
    if (combo[i] == guess[i]) { 
        Pegs[peg] = 6; 
        peg++; 
    } 
} 

for (int i = 0; i < 4; i++) { 
    for (int x = 0; x < 4; x++) { 
        if (guess[i] == combo[x] && guess[i] != combo[i]) { 
            Pegs[peg] = 7; 
            peg++; 
        } 
    } 
} 

for (int i = 0; i < 4; i++) { 
    if (Pegs[i] == 0) { 
        Pegs[i] = 5; 
    } 
} 

数组猜测存储用户猜测,数组组合是正确的代码,Pegs []是存储比较数组的地方,而int peg只是说明在数组中存储值的位置。这样做的问题是它并不总是正确地将数组返回到它要做的事情。

2 个答案:

答案 0 :(得分:2)

要比较数组,只需要第一个循环,只有当同一位置的数字不相等时才应执行内循环:

for(int i = 0; i < 4; i++) {
    Pegs[i]=5;
    if(combo[i] == guess[i]) {
        Pegs[i] = 6;
        guess[i]= -1;
    }
}

for(int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        if(combo[i] == guess[j]) {
            Pegs[i]=7;
            guess[j]= -1;
            break;
        }
    }
}
...

答案 1 :(得分:2)

使用其他方法,如果你有

的场景,你会遇到麻烦
int[] combot = new int[] {0, 1, 1, 3};
int[] guess  = new int[] {0, 4, 5, 1};

因为你会得到错误的[6, 7, 7, 5]而不是正确的[6, 7, 5, 5],因为你会计算你的最后一次猜测1

通过使用两个flags数组,一个用于完全匹配,一个用于错误猜测一个标志数组,您可以获得更好更准确的结果:

** 已修改 **我已将其还原,因为我发现对于combo = [0, 1, 1, 3]guess = [3, 0, 1, 5],它的回复不正确。

public int[] computeGuess(int[] combo, int[] guess) {
    int[] result = new int[4];

    Arrays.fill(result, 5);  // incorrect values for all!

    boolean[] exactMatches = new boolean[4];  // all initially set to false
    boolean[] misplaced    = new boolean[4];

    for (int i = 0; i < 4; i++) {
        if (combo[i] == guess[i]) {
            exactMatches[i] = true;
            misplaced[i] = false;  // make sure we don't use this as misplaced
        } else {
            for (int j = 0; j < 4; j++) {
                if (i != j && combo[i] == guess[j] && !exactMatches[j] && !misplaced[j]) {
                    misplaced[j] = true;
                    break;
                }
            }   
        }
    }

    int i = 0;
    for (boolean b : exactMatches) {
        if (b) {
            result[i++] = 6;
        }
    }
    for (boolean b : misplaced) {
        if (b) {
            result[i++] = 7;
        }
    }

    return result;
}