2016-04-22 5 views
0

У меня есть массив с 60 значениями, и когда я нажимаю на следующую кнопку, он будет циклически перебирать все значения моего массива в порядке возрастания до номера 60, затем он начинается с номера один еще раз.Array не правильно зацикливается - Java

У меня также есть предыдущая кнопка, поэтому я могу понизить значения вместо того, чтобы подниматься вверх. Когда я нажимаю предыдущую кнопку на первом значении массива [0], мое приложение падает, и я не уверен, почему.

Вот мой код:

public String nextFact() { 
    i++; 
    if(i >= facts.length) { 
     i = 0; 
    } 
    return facts[i]; 
} 

public String previousFact() { 
    i--; 
    if(i < 0) { 
     i = facts.length; 
    } 
    return facts[i]; 
} 
+1

Можете ли вы объяснить, почему вы думаете, что 'я = facts.length;' и 'фактами [я];' правильны? Я имею в виду, что вы, очевидно, знаете, что длина массива не является допустимым индексом, так как вы избегаете этого числа в 'nextFact', но в' previousFact' вы думаете иначе? – Tom

ответ

2

вы получаете ArrayIndexOutOfBoundsException при изменении i к facts.length, поскольку действительные индексы массива в диапазоне от 0 через facts.length - 1. Набор i - facts.length - 1.

if(i < 0) { 
    i = facts.length - 1; 
} 

Ваш код обертывания, который больше или равен длине, должен работать нормально.

+0

Я пробовал, и он по-прежнему падает, когда я ударил предыдущий. –

0

Ваш массив имеет размер array.length. Таким образом, последним индексом будет array.length-1. В вашей предыдущей функции вы назначаете array.length в i. Это более высокий индекс, чем максимальный индекс для массива, и поэтому он падает. Вы также должны получать ошибку indexoutofbound.

Вы должны заменить эту строку с этим:

i = facts.length - 1; 
+0

Я пробовал, и он по-прежнему падает, когда я ударил предыдущий. –

+0

Какая ошибка вы получаете? – denis

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