我想知道是否有人能帮我,我有一个游戏,电脑会随机生成一个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只表示在数组中存储值的位置。问题是它并不总是将数组正确地返回到它要执行的操作。
要比较数组,您只需要第一个循环,只有当同一位置的数字不相等时,才应执行内部循环:
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;
}
}
}
...
使用其他方法时,如果出现以下情况,则会遇到麻烦:
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#代码: