我在此代码块中有一个错误。调试器提示原因是这一行代码char chr = getSecretWord.charAt(i);
char chr = getSecretWord.charAt(i);
该代码的作用是寻找userInput和之间的匹配secretWord。我必须for loop逐一检查secretWord字母的长度,如果有匹配的字母,则返回true。如果不是,则返回false …但是当假定只是返回false时,程序崩溃…我猜想这与该行有关,但不知道到底是什么getSecretWord.charAt(i);
userInput
secretWord
for loop
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以便我可以使用Strings方法,这是正确的length()吗?
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)*
for (int i = 0; i <= getSecretWord.length(); i++)
应该:
for (int i = 0; i < getSecretWord.length(); i++) // ^^^ // see here
一个有效索引n个字符数的字符串(或n-元素阵列)是0通过n-1以下。
n
0
n-1
因此,如果您的密码是xyyzy,则有效索引为零到四。您的原始循环i将设置为0到 5进行 迭代 , 因此出现了问题。
xyyzy
i
但是,当您可以摆脱一些简单的东西时,似乎有很多不必要的代码。
首先,我将消除混乱的根源-函数名称听起来像是用户输入,并且密码必须完全匹配,而您的注释则相反:
谢谢,这有效。但是循环的原因是用户输入了一个字母,我想看看该字母是否在SecretWord中。(这是一个子手游戏)。
在这种情况下,您只想查看秘密单词中是否存在单个字符。我会更改函数名称以适合它,即使那样,也可以用更少的代码来完成:
private boolean isInSecretWord (String userInput) { String secretWord = getSecretWord(); return secretWord.contains(userInput); }