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++){
j
是s.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
🙂