2014-12-02 68 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

相關問題