Навигация по Java-массиву - PullRequest
0 голосов
/ 06 января 2012

Пожалуйста, помогите мне исправить мои заявления if. Я пытаюсь перемещаться по элементам массива, но в некоторых случаях следующая и предыдущая кнопка отображает ошибки командной строки. ошибки бывают разные, но у них есть следующие общие черты ...

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index....

вот код

public class buttonListener implements ActionListener {
    public void actionPerformed(ActionEvent x){
        if (x.getSource() == nxtButton){
            indexCounter++;
            balanceFrame.setVisible(false);
            callDetail();

            if(indexCounter == filePaths.size()-1) { //max counter...we dont want to exceed the max number, size of array
                indexCounter = -1;
        }
    }
    else if (x.getSource() == prevButton){
        indexCounter--;
        balanceFrame.setVisible(false);
        callDetail();
        if(indexCounter == 0){
            indexCounter = filePaths.size()-1;
        }
    }
}}

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Вы получаете это исключение, потому что вы увеличиваете / уменьшаете счетчик, получаете доступ к ArrayList, а затем делаете проверку.

Вам нужно увеличить / уменьшить счетчик, выполнить проверку и затем получить доступ к ArrayList.

ArrayLists имеют 0 расположений на основе, поэтому вам нужно убедиться, что наименьшее возможное расположение равно 0 и что максимальное возможное расположение на единицу меньше, чем количество элементов в ArrayList.

Что вам нужно сделать, это примерно так:

indexCounter++;
if (indexCounter > (filePaths.size - 1))
{
    indexCounter = filePaths.size - 1;
}
callDetail();

и во второй части

indexCounter--;
if (indexCounter < 0)
{
    indexCounter = 0;
}
callDetail();

Это заставит пользователя продолжать просматривать последнюю запись, если он / она продолжает нажимать следующую, и первую запись, если он / она продолжает нажимать предыдущую.

Во второй ноте вы, кажется, хотите реализовать Круговой список, поэтому это должно работать:

indexCounter++;
if (indexCounter > (filePaths.size - 1))
{
    indexCounter = 0;
}
callDetail();

и во второй части

indexCounter--;
if (indexCounter < 0)
{
    indexCounter = filePaths.size - 1;
}
callDetail();
1 голос
/ 06 января 2012

Ваш вопрос немного расплывчат, но я думаю, что проблема здесь:

indexCounter = -1;

Я думаю, что вы на самом деле хотели:

indexCounter -= 1; // indexCounter = indexCounter - 1

Ваше условие if также кажется неправильным. Должно быть так:

if (indexCounter == filePaths.size()) {
    indexCounter -= 1; // indexCounter = indexCounter - 1
}

Или даже лучше:

if (indexCounter >= filePaths.size()) {
    indexCounter = filePaths.size() - 1;
}

Также, на заметку, в Java принято использовать CamelCase для имен классов. Таким образом, ваш класс должен называться ButtonListener, а не buttonListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...