2014-12-02 67 views
-1

因此,我想循环访问数组,并查找阵列在哪些点开始新的一年以及该年的几天。我有的问题是我无法得到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 ++; 
      } 



     } 



    } 
} 

回答

3

您的环路上升到a.length-1。这是数组中的最后一个索引。但是,当您说String p = a[i+1]时,您尝试访问索引。这是试图访问i+1,这是超出阵列的界限。

这里有一个调试提示:当异常说at WeatherAnalysis.yearsArray(WeatherAnalysis.java:213),那213是抛出异常的行号。这可能是String p = a[i+1]就行了。

+0

是的,我知道它已经不在阵列中,但我无法让它工作,我需要它。因为它将第一个索引与第二个索引进行比较,以查看它是否改变年份。当它打印出年份,索引范围和一年中的日期时......我不知道如何在不超出数组范围的情况下完成2013年 – 2014-12-02 02:15:40

+1

我并不完全确定问题所在。你可以在一次迭代之前结束循环吗? – Greg 2014-12-02 02:18:34

+0

@ C-Webz @格雷格格雷格是对的。我想如果你改变循环为'for(int i = 0; i Universe 2014-12-02 02:31:17

0

问题是你参考a[i + 1]。当i位于数组的最后一个索引处时,i + 1在数组结尾之后,导致Java抛出IndexOutOfBoundsException

相关问题