当前位置: 首页 > 知识库问答 >
问题:

在Java中比较一个游戏的数组

宋安晏
2023-03-14

我想知道是否有人能帮我,我有一个游戏,电脑会随机生成一个4位数的代码,每个数字从0到5不等。然后用户猜出这段代码,计算机返回一个数组,我将其打印成字符串。数组中的每一个数字在正确的位置上都应该包含一个6,猜测中的每一个数字在正确的位置上都应该包含一个7,猜测中的每一个数字在正确的位置上都应该包含一个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; 
    } 
} 

数组guess存储用户的猜测,数组组合是正确的代码,Pegs[]是存储比较数组的位置,int peg只表示在数组中存储值的位置。问题是它并不总是将数组正确地返回到它要执行的操作。

共有2个答案

尉迟阳煦
2023-03-14

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

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;
        }
    }
}
...
丌官坚秉
2023-03-14

使用其他方法时,如果出现以下情况,则会遇到麻烦:

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计算成两倍。

通过使用 两个标志数组,一个用于精确匹配,一个用于错位猜测 单个标志数组,您可以获得更好和准确的结果:

**已编辑**我将其还原回去,因为我发现对于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;
}
 类似资料:
  • 本文向大家介绍java实现多人多牌数比较游戏,包括了java实现多人多牌数比较游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现多人多牌数比较游戏的具体代码,供大家参考,具体内容如下 具体实现步骤如下: 实现扑克Card类,用于储存扑克牌,1-13代表点数,4-1代表花色(黑桃,红桃,梅花,分块) 实现扑克列表CardList类,用于实现生成一副牌,洗牌,发牌的功能 实

  • 本文向大家介绍用Java在一行中比较两个字节的数组,包括了用Java在一行中比较两个字节的数组的使用技巧和注意事项,需要的朋友参考一下 可以使用java.util.Arrays.equals()方法在Java中比较两个字节数组。如果数组相等,则此方法返回true,否则返回false。如果两个数组以相同顺序包含相同数量的元素,则它们相等。给出了一个使用Arrays.equals()方法比较两个字节数

  • 对于家庭作业,我得到了下面的代码和空白的方法。我一直在努力,但我仍然不明白mutator setComparer或Comparator comparer在这个程序中是如何工作的。我在网上研究了如何使用比较器,但想法仍然不清楚。有人能给我一些指导吗?。 我 必须初始化比较器比较器吗?如果是这样,我该怎么做? 上面的私人int比较(扑克牌一,扑克牌二)是什么意思?(this.comparer=null

  • 问题内容: 我正在尝试编写代码以比较两个数组。在第一个数组中,我输入了自己的数字,但是在第二个数组中,输入了输入文件中的数字。该数组的大小由文件中的第一个数字确定,而第一个数组的大小始终为10。两个数组以及数字的长度必须相同。 我的代码如下: 问题答案:

  • 我怎样才能比较这两个数组,以一种我想返回另一个数组的方式,它包含B中的所有a的值? 返回数组: 来自答案的C#代码: