我收到此错误: java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:7
我不知道是什么导致了越界异常。这是我的代码:
public class LuckySeven {
public int luckySevens(String input, int index, int sevens) {
int curDigit = input.charAt(index) - 48;
if (curDigit == 7) {
if (index > 0 && (int) input.charAt(index - 1) - 48 == 7) {
sevens += 14;
}
else sevens++;
}
if (index < input.length()) {
luckySevens(input, index+1, sevens);
}
return sevens;
}
}
我只是在运行luckySevens(“1087171”,0,0),但是当它试图重复时它会一直打破。这是错误消息:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7
at java.lang.String.charAt(String.java:658)
at LuckySeven.luckySevens(LuckySeven.java:6)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at Tester.main(Tester.java:7)
我真的很感激任何帮助!我觉得这是一些我没有抓到的蠢事。谢谢!
答案 0 :(得分:0)
您的代码的问题在于您引用了int curDigit = input.charAt(index) - 48;
,而if语句正在使用input.length()。
我的意思是,将字符串“hello”传递给您的函数。 String.length()
返回函数的长度,在这种情况下为5.在倒数第二个循环中,index将等于4,并且函数将再次运行,索引等于4 + 1或5。
但是因为input[5]
会尝试引用不存在的字符串的第六个字符,所以会出现字符串IoB错误。
要解决此问题,请尝试替换
if (index < input.length()) {
luckySevens(input, index+1, sevens);
}
与
if(index < input.length() - 1) {
luckySevens(input, index+1, sevens)l
}
或考虑使用for循环。希望这会有所帮助:D
答案 1 :(得分:0)
首先查看抛出的异常,
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7
at java.lang.String.charAt(String.java:658)
String index out of range : 7
表示您正在请求索引7并且它已超出范围。由于您的字符串1087171
长度为7个字符,因此它只有索引0-6(0,1,2,3,4,5,6);没有第7个指数。
如果我们继续查看其余的异常,我们可以进一步确定发生了什么:
at LuckySeven.luckySevens(LuckySeven.java:6)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
at LuckySeven.luckySevens(LuckySeven.java:14)
行at LuckySeven.luckySevens(LuckySeven.java:6)
是导致错误被抛出的表达式。在这种情况下,它是int curDigit = input.charAt(index) - 48;
。接下来的7行at LuckySeven.luckySevens(LuckySeven.java:14)
是字符串前7个字符的递归方法调用。所以我们可以告诉它它通过前7个字符工作,但后来第8次称为luckySevens方法。
正如另一位用户已发布,请更改块
if (index < input.length()) {
luckySevens(input, index+1, sevens);
}
到
if (index < input.length()-1) {
luckySevens(input, index+1, sevens);
}
它将停在第7个角色。