【问题标题】:Java -- Iterations not workingJava——迭代不起作用
【发布时间】:2013-02-14 00:16:59
【问题描述】:

我正在做一个类似于 Cows and Bulls 的 Java 游戏。但不是显示“Cow”和“Bull”,而是显示“MOO”或“moo”。生成一个 4 位数字,用户可以猜到。对于正确指定的每个数字(相同的数字,相同的位置),屏幕上会显示一个“MOO”。对于每个被猜到的具有相同数字但位置错误的数字,都会显示一个“moo”。我在执行返回多少“moo”的方法时遇到问题。

public int getLittleMooCount(int guess)
{
    int count = 0;
    String guessString = Integer.toString(guess);
    String randomValueString = Integer.toString(randomValue);

    // Pads the number with zero if less than 4 digits, so length is always 4
    while(guessString.length() < 4)
    {
        guessString = "0" + guessString;
    }

    while(randomValueString.length() < 4)
    {
        randomValueString = "0" + randomValueString;
    }

    // checking to see if positions EXACTLY match. If so, it would return a MOO (the getBigMoo
    // Count is in my other method)
    for (int i = 0; i < 4; i++)
    {
        if (guessString.charAt(i) == randomValueString.charAt(i))
        {
            randomValueString = randomValueString.replace(randomValueString.charAt(i), 'X');
            guessString = guessString.replace(guessString.charAt(i), 'O');
        }
    }

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (guessString.charAt(j) == randomValueString.charAt(i))
            {
                count++;
                randomValueString = randomValueString.replace(randomValueString.charAt(i), 'X');
                guessString = guessString.replace(guessString.charAt(j), 'O');
            }

        }
    }

    return count;
}
  1. 测试输入
    1. 0011
    2. 2233
    3. 4455
    4. 6677
    5. 8899
    6. 1234
    7. 5678
    8. 9090

结果是随机数 5509

  1. 1 moo = 正确
  2. 没有 = 正确
  3. 1 moo = 错误!应该是两个哞。
  4. 没有 = 正确
  5. 1 MOO = 正确
  6. 没有 = 正确
  7. 1 MOO = 正确
  8. 2 moo = 正确

它似乎适用于某些数字,但对于其他数字,总是有一个测试数据是错误的。显然,出了点问题,但我尝试了一切,这令人沮丧!如果有帮助,我可以发布另一个示例。

提前感谢您的帮助!

编辑:好吧,我把它改成了一个字符数组,现在它什么也没做。我可以发誓我做对了。

int count = 0;
    String guessString = Integer.toString(guess);
    String randomValueString = Integer.toString(randomValue);

    char [] randomValueCharacter = randomValueString.toCharArray();
    char [] guessCharacter = guessString.toCharArray();


    while(guessString.length() < 4)
    {
        guessString = "0" + guessString;
    }

    while(randomValueString.length() < 4)
    {
        randomValueString = "0" + randomValueString;
    }

    for (int i = 0; i < 4; i++)
    {
        if (guessString.charAt(i) == randomValueString.charAt(i))
        {
            randomValueCharacter[i] = 'X';
            guessCharacter[i] = 'O';
        }
    }

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            if (guessString.charAt(j) == randomValueString.charAt(i))
            {
                count++;
                randomValueCharacter[i] = 'X';
                guessCharacter[j] = 'O';
            }

        }
    }

    return count;
}

【问题讨论】:

    标签: java iteration


    【解决方案1】:

    这是因为 String.replace()。 此功能不会像您假设的那样替换特定位置的字符,它会替换给定字符的所有外观!所以在找到前 5 个之后,两个 5 都被替换为 x。

    JavaDoc

    公共字符串替换(char oldChar, char newChar) 返回一个新字符串,该字符串是用 newChar 替换此字符串中所有出现的 oldChar 所产生的。如果 字符 oldChar 不在字符序列中出现 由这个 String 对象表示,然后是对这个 String 的引用 返回对象。否则,将创建一个新的 String 对象 表示与字符序列相同的字符序列 由这个 String 对象表示,除了每次出现 oldChar 被 newChar 替换。

    例子:

    "你的地窖里的豆科植物".replace('e', 'o') 返回 "你衣领里的蚊子" "男爵战争".replace('r', 'y') 返回“刺刀之道”“与紫色海豚对打”.replace('p', 't') 返回“与龟龟主演”“JonL”.replace('q', 'x') 返回“JonL”(无变化) 参数: oldChar - 旧字符。 newChar - 新角色。回报:一个 通过替换每个出现的字符串从该字符串派生的字符串 oldChar 与 newChar。

    http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html

    您可以改用整数数组。


    试试这个

        int count = 0;
        String guessString = Integer.toString(4455);
        String randomValueString = Integer.toString(5509);
    
        char [] randomValueCharacter = randomValueString.toCharArray();
        char [] guessCharacter = guessString.toCharArray();
    
    
        while(guessString.length() < 4)
        {
            guessString = "0" + guessString;
        }
    
        while(randomValueString.length() < 4)
        {
            randomValueString = "0" + randomValueString;
        }
    
        for (int i = 0; i < 4; i++)
        {
            if (guessCharacter[i] == randomValueCharacter[i])
            {
                randomValueCharacter[i] = 'X';
                guessCharacter[i] = 'O';
            }
        }
    
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                if (guessCharacter[j] == randomValueCharacter[i])
                {
                    count++;
                    randomValueCharacter[i] = 'X';
                    guessCharacter[j] = 'O';
                }
    
            }
        }
    
        return count;
    }
    

    【讨论】:

    • 将 charAt(i) 更改为 guessChar[i] 等。
    • 我将它们全部更改为那个(嗯,从字符串变量到字符变量,然后将 () 到 []。工作正常,除非我在随机数为 1675 时测试它,我输入了0011,它应该显示一个moo时什么都不显示。
    • 另一个例子是随机数是5122,猜测是2233,它显示一个MOO和两个“moo”,它不应该显示一个大的。
    猜你喜欢
    • 2020-11-23
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多