0

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

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);

    }
}
4

2 回答 2

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++ {
    // ...
}
于 2013-03-04T02:43:56.367 回答
0

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

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


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

于 2013-03-04T02:50:58.953 回答