Java - 迭代不起作用

时间:2013-02-14 00:17:00

标签: java iteration

我正在做一个类似于牛和公牛的Java游戏。但它没有显示“牛”和“公牛”,而是显示“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
  2. 结果w /随机数为5509

    1. 1 moo =正确
    2. 没有=正确
    3. 1 moo =错!应该是两个moo's。
    4. 没有=正确
    5. 1 MOO =正确
    6. 没有=正确
    7. 1 MOO =正确
    8. 2 moo = correct
    9. 它似乎适用于某些数字,但对于其他数字,总有一个测试数据是错误的。显然,有些事情是错的,但我尝试了一切,这令人沮丧!如果它有用,我可以发布另一个例子。

      提前感谢您的帮助!

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

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

1 个答案:

答案 0 :(得分:4)

这是因为String.replace()。 此函数不会替换您所假设的特定位置的字符,它会替换给定字符的所有外观!因此,在找到前5个后,5和5都被x替换。

的JavaDoc

  

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

     

示例:

     

&#34;在你的酒窖里捣碎#34; .replace(&#39; e&#39;,&#39; o&#39;)            返回&#34;衣领中的蚊子&#34; &#34;男爵的战争&#34; .replace(&#39; r&#39;,&#39; y&#39;)            回归&#34;刺刀的方式&#34; &#34;与紫色海豚陪练&#34; .replace(&#39; p&#39;,&#39; t&#39;)            返回&#34;用龟龟主演&#34; &#34; JonL&#34; .replace(&#39; q&#39;,&#39; x&#39;)返回&#34; JonL&#34; (无变化)参数:   oldChar - 老字符。 newChar - 新角色。返回:a   通过替换每次出现的字符串派生的字符串   oldChar with 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;
}