我正在做一个类似于牛和公牛的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;
}
结果w /随机数为5509
它似乎适用于某些数字,但对于其他数字,总有一个测试数据是错误的。显然,有些事情是错的,但我尝试了一切,这令人沮丧!如果它有用,我可以发布另一个例子。
提前感谢您的帮助!
编辑:好吧,我把它改成了一个字符数组,现在它什么也没做。我能发誓我做对了。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;
}
答案 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;
}