我正在制作一个计算句子中单词的程序。空间不计算,标点符号不计算在内。我正在使用一个接收输入的模块并输出答案。但不要担心,因为我不认为这是我的程序打印出来的原因
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);
}
}
答案 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的调试器运行程序,并通过代码“单步执行”以查看它正在执行的操作。