Java编程异常
有人能帮我吗?我不理解这种例外情况:
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));
}
}
}
# 1 楼答案
啊。感谢格雷格发现了这个问题另一半的链接。他是对的,这不公平
for循环从0到
s
的长度加1如果s是一个数组:
然后从0到4。该数组的索引为0、1和2。所以,你试图到达终点之外的两点
您想删除这一行:
并将for循环更改为:
# 2 楼答案
循环应该是:
字符串中的最后一个字符具有索引:
s.length() - 1
所以你需要使用防护装置:
i < s.length()
这样,循环在
i
变成s.length()
之前终止# 3 楼答案
您正在引用位置9处的字符,该位置超出了实际字符串的范围。记住检查它是否在[0,长度[]范围内
# 4 楼答案
您试图直接访问少于10个字符的字符串的第10个字符。比如:
请记住,字符串索引是基于0的,因此
.charAt(9)
=>;第十个字符。所以"123".charAt(3)
也会扔# 5 楼答案
j
是s.length()+1
,然后i
是<=j
。所以:s.charAt(i)
最终将访问索引length()+1
,这比允许的多2个# 6 楼答案
表情
如果
i
大于或等于s.length()
,将抛出错误。尝试使用相反