我可以用什么样的陈述来解决我的问题。
我正在编写一个程序,它将需要四个randomNumbers和四个playerGuesses。如果第一个,第二个,第三个或第四个randomNumber分别与第一个,第二个,第三个或第四个playerGuess匹配,则每个匹配为它们授予一个红色引脚(因此最多4个,最小值为0)。如果playerGuess号码确实出现在randomNumber序列中,但是在错误的位置,则玩家将获得白色别针奖励。如果为randomNumber授予红色别针(意味着对正确位置的正确猜测),则不再为该数字奖励白色针脚。
示例:
与playerGuesses(0,2,2,1)匹配的randomNumber序列(0,1,2,3)将产生2个红色引脚和1个白色引脚。
下面的代码显示了确定红色和白色引脚的过程。请注意,randomNumber和playerGuesses都是四个整数的数组。
//Determining the amount of red and white pins
if (randomNumbers[0] == playerGuesses[0])
{Red = Red+1;}
else if (randomNumbers[0] == playerGuesses[1] || randomNumbers[0] == playerGuesses[2] || randomNumbers[0] == playerGuesses[3])
{White = White+1;}
if (randomNumbers[1] == playerGuesses[1])
{Red = Red+1;}
else if (randomNumbers[1] == playerGuesses[0] || randomNumbers[1] == playerGuesses[2] || randomNumbers[1] == playerGuesses[3])
{White = White+1;}
if (randomNumbers[2] == playerGuesses[2])
{Red = Red+1;}
else if (randomNumbers[2] == playerGuesses[0] || randomNumbers[2] == playerGuesses[1] || randomNumbers[2] == playerGuesses[3])
{White = White+1;}
if (randomNumbers[3]==playerGuesses[3])
{Red = Red+1;}
else if (randomNumbers[3] == playerGuesses[0] || randomNumbers[3] == playerGuesses[1] || randomNumbers[3] == playerGuesses[2])
{White = White+1;}
当多个if-else语句变为true时,会出现一个非常具体的问题。最好用一个例子来表示:
计算机生成:(4 9 7 7)
球员猜测:(1 7 1 1)
控制台返回:2个白色针脚,0个红色针脚。
在此示例中,没有触发确定红色引脚的if语句。因此,所有if-else语句都用于确定白色引脚。
问题在于" 7"在播放器的猜测中,触发第三个和第四个if-else语句,用于添加白色引脚,从而产生两个白色引脚。然而,这场比赛只是为了奖励一个白色别针。
你们有没有想过如何确保任何playerGuess只能在没有红色别针的情况下触发一个白色针脚。
(我希望提供回答我问题所需的所有信息!)
答案 0 :(得分:0)
if (randomNumbers [0] == playerGuesses [0])
{Red = Red+1;}
else if (randomNumbers[0] == playerGuesses[1] || randomNumbers[0] == playerGuesses[2] || randomNumbers[0] == playerGuesses[3])
{White = White+1;}
if (randomNumbers[1] == playerGuesses[1])
{Red = Red+1;}
else if (randomNumbers[1] == playerGuesses[2] || randomNumbers[1] == playerGuesses[3])
{White = White+1;}
if (randomNumbers[2] == playerGuesses[2])
{Red = Red+1;}
else if ( randomNumbers[2] == playerGuesses[3])
{White = White+1;}
if (randomNumbers[3]==playerGuesses[3])
{Red = Red+1;}
这应该修复你的代码。你重新检查了一些条件,最多3次,如randomNumbers [0] == playerGuesses [1]。 当您检查时,这会影响实际满足条件的次数 不止一次。 使用您的示例和原始代码,
计算机生成:(4 9 7 7)
球员猜测:(1 7 1 1)
你的代码检查你的第三个else if语句中是否randomNumbers [2] == playerGuesses [3],然后 if randomNumbers [3] == playerGuesses [2]在你的第四个else if语句中。如你看到的, 这将检查相同的条件两次,因此将提供2个白色针脚而不是1个白色针脚。 重新制作的代码将确保这不会发生。
答案 1 :(得分:0)
我建议采用不同的方法,
逻辑更简单,if
语句更少
它还解决了太多白色针脚的问题。
public static void main(String[] args) {
int[] randomNumbers = {4, 9, 7, 7};
int[] playerGuesses = {1, 7, 1, 1};
compare(randomNumbers, playerGuesses);
}
/**
* Determine the amount of red and white pins
*/
private static void compare(int[] randomNumbers, int[] playerGuesses) {
int red = 0;
for (int i = 0; i < randomNumbers.length; i++) {
if (randomNumbers[i] == playerGuesses[i]) {
red++;
}
}
int total = 0;
for (int x = 0; x < 10; x++) {
total += Math.min(frequency(randomNumbers, x), frequency(playerGuesses, x));
}
int white = total - red;
System.out.println(white + " white pins, " + red + " red pins");
}
/**
* Determine how many times the value x occurs in the array
*/
private static int frequency(int[] array, int x) {
int result = 0;
for (int i = 0; i<array.length; i++) {
if (array[i] == x) {
result++;
}
}
return result;
}