2014-12-02 3 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 года, не выходя из границ массива –

+1

Я не совсем уверен, в чем проблема. Можете ли вы закончить цикл за одну итерацию раньше? – Greg

+0

@ C-Webz @ Грег Грег прав. Я полагаю, если вы измените цикл на 'for (int i = 0; i Universe

0

Проблема в том, что вы ссылаетесь на a[i + 1]. Когда i находится в последнем индексе массива, i + 1 находится после конца массива, заставляя Java выкидывать IndexOutOfBoundsException.

Смежные вопросы