import java.util.Scanner;
public class Taxi {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int groups = input.nextInt();
int counter=0;
int[] pass = new int[groups];
for(int i=0; i<groups; i++){
pass[i] = input.nextInt();
}
for(int i=0; i<groups; i++){
if(pass[i]==4)
counter++;
else if(pass[i]+pass[i+1]<=4){
counter++;
i++;
}
else
counter++;
}
System.out.println(counter);
}
}
继续收到错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Taxi.main(Taxi.java:21)
请帮助
答案 0 :(得分:3)
此行似乎导致异常:
else if(pass[i]+pass[i+1]<=4){
您将i
限制为小于groups
,这是数组的大小,但是您会故意使用i+1
来结束。
首先检查i
是否小于groups
else if ( (i < groups - 1) && (pass[i]+pass[i+1]<=4)){
答案 1 :(得分:0)
else if(pass[i]+pass[i+1]<=4)
行肯定是你的杀手。
原因是你使用for i < groups
for(int i=0; i<groups; i++)
所以i+1
等于最后一次迭代的组。
比方说,例如,组大小为5
,然后for循环变为
for(int i=0;i<5;i++)
我们最多可以group[0] ... groups[4]
和groups[5]
causes
array index out of bound exception
。
如果我们检查上面的循环,那么当i
转到4
时,它会满足循环检查4<5
并输入for循环但是你正在进行pass[i]
- &GT;好的,pass[i+1]
将变得像pass[5]
,这肯定会导致数组索引超出绑定异常
所以请检查下面的循环
for(int i=0; i<groups-1; i++)
现在即使是最后一个元素也能正常工作。