下面的程序应该找到字符串中的平均字母。例如:“abc”的平均值是“b”。当我运行程序时,我收到以下错误消息。谢谢你的帮助!
计划:
import java.util.*;
public class AvLetter{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("enter a phrase");
String s = scan.nextLine();
s = s.toLowerCase();
int letterCount = 0; int sum = 0; char c;
for(int pos= 0; pos< s.length(); pos++){
c=s.charAt(pos);
if (Character.isLetter(c)) {
sum = sum + (int)s.charAt(c);
letterCount++;
System.out.println((char)(sum/letterCount));
}
}
}
}
错误消息:
java.lang.StringIndexOutOfBoundsException: String index out of range: 97
at java.lang.String.charAt(String.java:686)
at AvLetter.main(AvLetter.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)
答案 0 :(得分:8)
java.lang.StringIndexOutOfBoundsException: String index out of range: 97 at
java.lang.String.charAt(String.java:686) at AvLetter.main(AvLetter.java:14) at
...
堆栈跟踪告诉你第14行出了问题(在你上面发布的第13行)。第14行是什么?你期望那个方法调用做什么,文档说它实际上做了什么?与在第12行使用它相比,你在第14行使用它有意义吗?
答案 1 :(得分:1)
sum = sum + (int)s.charAt(c);
你的意思是
sum = sum + (int)s.charAt(pos);
答案 2 :(得分:1)
你试图在索引c处获取字符串s中的字符,这是pos处字符的ASCII值。
你打算做的是将c的整数值加到总和上,如果是,你应该
sum += (int)c;
因为c已经是你想要的角色,所以不需要重新访问它。
此外,您可能打算将System.out.println
置于for循环之外。
答案 3 :(得分:0)
看起来像是
sum = sum + (int)s.charAt(c);
是错误。 “c”是你角色的值(在你的测试用例中,结果是97),这显然不在你的String的范围内(如果你正在测试像abc这样的东西)。
由于97已经是c的值,你可以说
sum = sum + c;
另请注意,letterCount不是很有用,因为它计算了String的长度,这可以通过s.length()获得。