我正在用Java编写传统的刽子手游戏。我目前所坚持的是找出用户字符输入是否不是String
中的字符。
if(getLetters.indexOf(userCharInput)==-1) //getLetters is the StringBuilder, and the userCharInput is a String.
{
playerCounter++;
}
这是我似乎遇到麻烦的部分,我查看了不同的indexOf
示例,并且我已经制定了这个以便与我的程序一起使用。
问题是,它不起作用。我设置它以便玩家有3次机会猜测这个单词,因为默认单词是“apple”我猜对了'a','p'和'l',这让'e'被猜到了。现在我故意做出3次不正确的猜测,并且不会触发下一个else if
:
else if(playerCounter == 3)
{
System.out.println("All lives are gone! Game Over!");
playerCounter = 1; //resets the playerCounter to one.
System.exit(0);
}
非常感谢任何帮助。
答案 0 :(得分:3)
这是因为当你继续猜错字母时,第一个if
语句被评估为true:
if(getLetters.indexOf(userCharInput)==-1) //getLetters is the StringBuilder, and the userCharInput is a String.
{
playerCounter++;
}
所以你不断增加playerCounter(超过3)。这意味着你的下一个语句是无法访问的(一旦它超过3,它就不会变得更小,至少使用你到目前为止发布的代码)。因此,else if (playerCounter == 3)
可能无法访问。
答案 1 :(得分:1)
我猜你的else if
是另一个if语句的一部分,所以请检查出来。
答案 2 :(得分:0)
它无法正常工作的原因是因为indexOf
方法使用不当,部分原因在于if语句的排序,但这对主要问题来说非常微不足道。必须改变的是我使用indexOf
方法的方式。
即。而不是gletter.indexOf(character);
它应该是word.indexOf(character);
其中word
是必须猜到的词,而gletter
是用来跟踪用户猜测的StringBuilder
。
答案 3 :(得分:-2)
这是StringBuilder的Javadoc:
根据你发布的代码,我猜:
1)您将所需的字母(例如单词“apple”中的字母)保存到getLetters。
2)getLetters是StringBuilder类型
3)如果userCharInput类型为“char”,那么indexOf()可能将不能给出预期的结果
4)用“if if”代替“if”
SUGGESTIONS:
尝试将“getLetters”更改为“String”,看看是否有帮助。
while (...) {
...
//getLetters is the StringBuilder, and the userCharInput is a String.
if(getLetters.indexOf(userCharInput)==-1) {
playerCounter++;
}
// Debug: comment this out once it's working
System.out.println ("userCharInput=" + userCharInput + ", playerCounter=" + playerCounter);
if(playerCounter == 3) {
System.out.println("All lives are gone! Game Over!");
playerCounter = 1; //resets the playerCounter to one.
System.exit(0);
}
...
}