2014-01-20 1 views
0

Arrayindex out of bounds Ошибка появляется, и я не знаю, почему это происходит. Я пытаюсь создать 2N объектов кортежей и пытаюсь поместить их в массиве размера 2NПочему Arrayindex не связан в следующем коде в java? Я проверил границы, но не понимаю, почему/

Tuple[] minuteunit = new Tuple[2*N]; 
if(!intervals.isEmpty()) 
{ 
    for(i = 0; i < ((2*N)-1); i = 1+2) 
    { 
     minuteunit[i] = new Tuple(intervals.get(i).getBeginMinuteUnit(),"s"); 
     minuteunit[i+1] = new Tuple(intervals.get(i).getEndMinuteUnit(),"e"); 
    } 
+0

Предположительно 'N' изменилось. Просто поставьте 'if (i> = minuteunit.length) {System.out.println (« Ooops! »); } 'внутри вашего цикла и установить точку останова в инструкции System.out.println. Затем вы можете посмотреть текущее состояние ваших варов и найти проблему. –

+3

Является ли 'i = 1 + 2' опечаткой? – hgoebl

+0

no i = i + 2 не – user3154554

ответ

1

скорее всего лицо, которое вы используете i в intervals.get(i), потому что i - увеличение на +2. Я бы предположил, что у вас есть N значения в intervals, и поэтому, когда i >= (N/2) вы получаете переполнение.

Попробуйте это:

for(i = 0; i < N; i++) 
{ 
    minuteunit[2*i] = new Tuple(intervals.get(i).getBeginMinuteUnit(),"s"); 
    minuteunit[2*i+1] = new Tuple(intervals.get(i).getEndMinuteUnit(),"e"); 
} 

Кроме того, предполагающие интервалы должны содержать N записи, вы можете обновить intervals.isEmpty() чек:

if(intevals.size() == N) 
{ 
    ... 
0
for(i = 0; i < ((2*N)-1); i = 1+2) 

На каждой итерации я равен 3, поэтому он никогда не заканчивается. Я думаю, что вы хотите добавить 2 на каждую итерации, так что используйте:

for(i = 0; i < ((2*N)-1); i = i+2) 
0

Вам нужно сделать условие завершения вашего цикла в i<2*N-2, в противном случае итерация добавления 2 будет толкать i на конце вашего массива, когда i является 2*N-2 (которые он в конечном итоге будет).

Кстати, я полагаю, что ваша итерация i=1+2 опечатка, и вы на самом деле закодированы i=i+2

0

я собираюсь взять выстрел в темноте здесь и предположить, что, возможно, intervals.get(i) является то, что на самом деле вызывает у вас проблемы здесь, а не сам массив. Игнорируя то, что кажется опечаткой в ​​приращении, условие для вашего цикла кажется прекрасным, так как если i < 2*N - 1, то i + 1 < 2*N и поэтому нет никакого индекса для массива. Это оставляет метод intervals.get(i).

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