Java编程exception

谁能帮我? 我不明白这个例外:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9 at java.lang.String.charAt(Unknown Source) at charPerLine.main(charPerLine.java:13) 

这是负责的代码:

 import java.util.*; public class charPerLine { public static void main(String[] args)throws StringIndexOutOfBoundsException { Scanner sc=new Scanner(System.in); System.out.print("Type any name:"); String s=sc.next(); int j= s.length()+1; for(int i=0;i<=j;i++){ System.out.println(s.charAt(i)); } } } 

您正在尝试直接访问少于10个字符的字符串的第10个字符。 就像是:

 "12345".charAt(9) 

请记住,String索引是从0开始的,因此.charAt(9) =>第10个字符。 所以"123".charAt(3)也会抛出。

您正在引用位置9处的字符,该字符超出实际字符串的范围。 记得检查它是否在[0,长度[。

啊。 感谢格雷格发现了这个问题另一半的链接。 他是对的,这不公平。

你的for循环从0变为s的长度加1。

所以,如果s是一个数组:

 ['a','b','c'] 

然后它将从0到4.该数组的索引是0,1和2.所以你试图访问超出结束的两个点。

你想删除这一行:

 int j= s.length()+1; 

并将for循环更改为:

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

js.length()+1然后i<=j 。 所以: s.charAt(i)最终将访问索引length()+1 ,这比允许的length()+1 2。

循环应该是:

 for(int i=0; i < s.length(); i++){ System.out.println(s.charAt(i)); } 

字符串中的最后一个字符有索引:

s.length() - 1

所以你需要使用警卫:

i < s.length()

这样你的循环就会在i成为s.length()之前终止。

表达方式

 s.charAt(i) 

如果i大于或等于s.length() ,则会抛出错误。 尝试使用

 for (int i=0; i 

代替。

只需更换

 int j= s.length()+1; for(int i=0;i<=j;i++){ ... } 

 int j= s.length(); for(int i=0;i 

🙂