0

我在这段代码中有一个错误。调试器建议它的原因是这行代码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)*
4

2 回答 2

3
for (int i = 0; i <= getSecretWord.length(); i++)

应该:

for (int i = 0; i < getSecretWord.length(); i++)
//               ^^^
//             see here

n-character 字符串(或n-element 数组)的有效索引是0通过( n-1inclusive)。

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


但是那里似乎有很多不必要的代码,当你可以摆脱一些简单的事情时。

首先,我会消除混淆的来源 - 函数名称听起来像用户输入和密码必须完全匹配,而您的评论表明并非如此:

谢谢,这行得通。但循环的原因是用户输入了一个字母,我想看看该字母是否在 SecretWord 中。(这是一个刽子手游戏)。

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

private boolean isInSecretWord (String userInput) {
    String secretWord = getSecretWord();
    return secretWord.contains(userInput);
}
于 2012-09-18T01:59:15.203 回答
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;
}
于 2012-09-18T02:05:19.700 回答