Java:使用字符串charAt方法进行循环崩溃

我在这段代码中有一个错误。 调试器建议它的原因是这行代码char chr = getSecretWord.charAt(i);

这段代码的作用是寻找userInputsecretWord之间的匹配。 我有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,这样我就可以使用Strings方法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元素数组)的有效索引是0n-1包括0n-1

因此,如果您的密码是xyyzy ,则有效索引为0到4。 你的原始循环迭代, i设置为零到五,因此问题。


但是那里似乎有很多不必要的代码,当你可以通过简单的东西逃脱时。

首先,我会删除一个混乱的来源 - 函数名称听起来像用户输入和秘密单词必须完全匹配,而您的评论指示不同:

谢谢,这个工作。 但循环的原因是用户输入一个字母,我想看看那封信是否在SecretWord中。 (这是刽子手游戏)。

在这种情况下,您只想查看密码中是否存在单个字符。 我会更改函数名称以适应,即使这样,也可以使用更少的代码完成:

 private boolean isInSecretWord (String userInput) { String secretWord = getSecretWord(); return secretWord.contains(userInput); } 

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