Java:使用字符串charAt方法进行循环崩溃
我在这段代码中有一个错误。 调试器建议它的原因是这行代码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,这样我就可以使用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
元素数组)的有效索引是0
到n-1
包括0
和n-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; }