继续使索引超出范围

时间:2013-03-04 02:38:51

标签: java char boolean double indexoutofrangeexception

我正在制作一个计算句子中单词的程序。空间不计算,标点符号不计算在内。我正在使用一个接收输入的模块并输出答案。但不要担心,因为我不认为这是我的程序打印出来的原因

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
String index out of range: 11
    at java.lang.String.charAt(String.java:658)
    at WordCount.main(WordCount.java:20)
public class WordCount{
    public static void main(String[] args){

        System.out.println("Please enter sentence");
        String sentence= IO.readString();

        System.out.println("Please enter minimum word length");
        double minword= IO.readInt();

        String word;
        int wordletter=0;
        int wordcount= 0;

        int count= -1;
        int end= sentence.length();

        do{
            count++;
            char space= sentence.charAt(count);

            if(Character.isLetter(space)){
                boolean cut= Character.isSpaceChar(space);
                if(cut== true)
                    word=sentence.substring(0,count);
                    count= 0;
                    wordletter= word.length();
                    end= end- wordletter;

                    if(wordletter< minword){
                        ;
                    }else{
                        wordcount= wordcount+1;
                    }
                }else{
                    ;
                }
            }else{
                ;
            }
        }while(count!= end);

    IO.outputIntAnswer(wordcount);

    }
}

2 个答案:

答案 0 :(得分:0)

char space= sentence.charAt(count);导致异常,因为您的循环条件运行了太多次。对于while条件,你想要的不是等于而不是等于

while (count - 1 < end);

减1是必需的,因为你以一种奇怪的方式构造了你的循环,我通常会这样做:

int end= sentence.length();
count = -1;
while (++count < end) {

}

或者,甚至更好。使用for循环。

int end = sentence.length();
for (int i = 0; i < end; i++ {
    // ...
}

答案 1 :(得分:0)

简单的答案是数组具有索引为array.length的{​​{1}}个元素。您编写代码(如编写)将尝试索引0, 1, ... array.length - 1

考虑使用终止循环的条件。


但这还不足以修复你的程序。我至少可以看到两个错误。由于这显然是一个学习练习,我建议你自己找到并修复它们......因为这是你需要开发的一项重要技能。我建议您使用IDE的调试器运行程序,并通过代码“单步执行”以查看它正在执行的操作。