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

时间:2012-09-18 01:56:06

标签: java string boolean

我在这段代码中有一个错误。调试器建议原因是这行代码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,这样我就可以使用字符串方法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)*

2 个答案:

答案 0 :(得分:3)

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

应该是:

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

n - 字符串(或n - 元素数组)的有效索引为0n-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;
}
相关问题