我在这段代码中有一个错误。调试器建议原因是这行代码char chr = getSecretWord.charAt(i);
此代码执行的操作是查找userInput
和secretWord
之间的匹配项。我让for loop
逐个查看secretWord字母的长度,如果有匹配的字母返回true。如果没有,则返回false ...但是当假设只返回false时程序崩溃...我猜这是该行的内容,但不知道究竟是什么getSecretWord.charAt(i);
private boolean isMatchingSecretWord(String userInput)
{
String secretWord = "";
String getSecretWord = getSecretWord();
for (int i = 0; i <= getSecretWord.length();i++)
{
char chr = getSecretWord.charAt(i);
secretWord = ""+chr;
if (secretWord.equals(userInput))
{
println("is true");
return true;
}
}
return false;
}
作为旁注,我对这段代码所做的是正确的,将getSecretWorld()方法赋值给String,这样我就可以使用字符串方法length()
了?
String getSecretWord = getSecretWord();
for (int i = 0; i <= getSecretWord.length();i++)
调试代码:
Exception in thread "Thread-4" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(String.java:686)
at Hangman.isMatchingSecretWord(Hangman.java:49)
at Hangman.userInput(Hangman.java:34)
at Hangman.run(Hangman.java:20)*
答案 0 :(得分:3)
for (int i = 0; i <= getSecretWord.length(); i++)
应该是:
for (int i = 0; i < getSecretWord.length(); i++)
// ^^^
// see here
n
- 字符串(或n
- 元素数组)的有效索引为0
到n-1
。{/ p>
因此,如果您的秘密字是xyyzy
,则有效索引为0到4。你的原始循环迭代,i
通过 5设置为零,因此问题。
但是那里似乎有很多不必要的代码,当你可以逃避简单的事情时。
首先,我会删除一个混乱的来源 - 函数名称听起来像用户输入,而密码字必须完全匹配,而你的评论则另有说明:
谢谢,这很有效。但循环的原因是用户输入一个字母,我想看看该字母是否在SecretWord中。 (这是一个刽子手游戏)。
在这种情况下,您只想查看密码中是否存在单个字符。我会更改函数名称以适应,即使这样,也可以使用更少的代码来完成:
private boolean isInSecretWord (String userInput) {
String secretWord = getSecretWord();
return secretWord.contains(userInput);
}
答案 1 :(得分:1)
由于你的for循环没有正确循环,你得到了越界错误,我修改了它以便循环不会超出界限而且你的secretWord变量也没有正确填充,代码现在应该按预期工作:)
private boolean isMatchingSecretWord(String userInput)
{
String secretWord = "";
String getSecretWord = getSecretWord();
for (int i = 0; i < getSecretWord.length();i++)
{
char chr = getSecretWord.charAt(i);
secretWord = secretWord + chr;
if (secretWord.equals(userInput))
{
println("is true");
return true;
}
}
return false;
}