尝试获取上一个值时发生IndexOutOfBounds错误
问题描述:
因此,我想循环访问数组,并查找阵列在哪些点开始新的一年以及该年的几天。我有的问题是我无法得到2013年的阵列的最后一年。尝试获取上一个值时发生IndexOutOfBounds错误
2010 [25202,25567)365天。
2011 [25567,25932)365天。
2012 [25932,26298)366天。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 26663
at WeatherAnalysis.yearsArray(WeatherAnalysis.java:213)
public static void yearsArray(String a[]) { // Array to find the amnount of days in a year
int range1 = 0;
int range2 = 1;
String year = "";
for (int i = 0; i <= a.length-1; i++) {
String s = a[i];
String p = a[i+1];
if (s.equals(p)) {
range2 ++;
}else{
year = s;
System.out.println(year+" ["+range1+", "+range2 +") "+ (range2-range1)+" days");
range1 = range2;
range2 ++;
}
}
}
}
答
您的环路上升到a.length-1
。这是数组中的最后一个索引。但是,当您说String p = a[i+1]
时,您尝试访问索引。这是试图访问i+1
,这是超出阵列的界限。
这里有一个调试提示:当异常说at WeatherAnalysis.yearsArray(WeatherAnalysis.java:213)
,那213
是抛出异常的行号。这可能是String p = a[i+1]
就行了。
答
问题是你参考a[i + 1]
。当i
位于数组的最后一个索引处时,i + 1
在数组结尾之后,导致Java抛出IndexOutOfBoundsException
。
是的,我知道它已经不在阵列中,但我无法让它工作,我需要它。因为它将第一个索引与第二个索引进行比较,以查看它是否改变年份。当它打印出年份,索引范围和一年中的日期时......我不知道如何在不超出数组范围的情况下完成2013年 – 2014-12-02 02:15:40
我并不完全确定问题所在。你可以在一次迭代之前结束循环吗? – Greg 2014-12-02 02:18:34
@ C-Webz @格雷格格雷格是对的。我想如果你改变循环为'for(int i = 0; i
Universe
2014-12-02 02:31:17