有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java确保只允许执行一条ifelse语句

我有点不知道我可以用什么样的陈述来解决我的问题

我正在写一个程序,需要四个随机数和四个Playerguess。如果第一个、第二个、第三个或第四个随机数分别与第一个、第二个、第三个或第四个参赛者匹配,他们将获得每场比赛的红牌(因此最多4个,最少0个)。如果playerGuess号码确实出现在随机数字序列中,但出现在错误的位置,则玩家将获得一枚白色pin。如果一个随机数字被授予了一个红色的pin(意味着在正确的位置上正确猜测),那么这个数字就不能再奖励任何白色的pin了

示例:

随机数序列(0,1,2,3)与playerGuesses(0,2,2,1)匹配将产生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语句为真时,就会出现一个非常特殊的问题。最好用一个例子来说明:

计算机生成:(497)

玩家猜测:(1 7 1)

控制台返回:2个白色引脚,0个红色引脚

在本例中,确定红色引脚的if语句均未被触发。因此,运行所有if-else语句来确定白色引脚

问题是,玩家猜测中的“7”会触发第三个和第四个if-else语句,用于添加白色PIN,从而产生两个白色PIN。然而,这场比赛的目的是只奖励一枚白大头针

你们知道如何确保任何玩家在没有红色徽章的情况下只能触发一个白色徽章吗

(我希望能提供回答我问题所需的所有信息!)


共 (1) 个答案

  1. # 1 楼答案

    我建议采取另一种方式, 具有更简单的逻辑和更少的if语句
    它还解决了你的问题,太多的白色引脚

    1. 确定红色引脚的数量
    2. 确定引脚总数(红色+白色):
      对于每个可能的数字(0,1,2,3,…9),数一数它的次数 在两个数组中都发生
      这两个计数中较小的一个会导致 引脚总数
    3. 计算白色引脚的数量(总数-红色)


    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;
    }