Как исправить IndexOutOfBoundException () в списке массивов? - PullRequest
0 голосов
/ 28 декабря 2018

В моей программе я использую список слоистых массивов для запоминания свойств кнопок (нажатие определенных кнопок является «правильным», а другие - «неправильным»), где внешний слой зависит от JPanel, на которой находятся кнопки, и внутреннего слояэто логические переменные, которые являются либо истиной, либо ложью.Количество кнопок случайное.В строке while (buttonInfo.get(buttonInfo.size() - 1).get(rightButton) == true) { имеется исключение IndexOutOfBoundsException, поэтому я продолжаю застрять в этой строке, но подозреваю, что такая же проблема возникает в buttonInfo.get(buttonInfo.size() - 1).add(rightButton, true);.

    int numberOfButtons = rnd.nextInt(5) + 2;
    buttonInfo.add(new ArrayList<Boolean>());
    JPanel newPanel = new JPanel();
    newPanel.setLayout(new GridLayout(2, 1, 5, 0));
    JLabel panelMessage = new JLabel("Choose one.");
    newPanel.add(panelMessage);
    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1, 0, 0, 5));
    for (int b = 0; b < numberOfButtons; b++) {
        JButton newButton = new JButton(String.valueOf(b));
        newButton.addActionListener(this);
        buttonPanel.add(newButton);
    }
    for (int a = 0; a < (numberOfButtons/2); a++) {
        int rightButton = rnd.nextInt(numberOfButtons);
        while (buttonInfo.get(buttonInfo.size() - 1).get(rightButton) == true) {
            rightButton = rnd.nextInt(numberOfButtons);
        }
        buttonInfo.get(buttonInfo.size() - 1).add(rightButton, true);
    }

Как мне исправить оператор while, чтобы он былв пределах границ?

1 Ответ

0 голосов
/ 28 декабря 2018

С этой строкой:

buttonInfo.add(new ArrayList<Boolean>());

вы добавляете только 1 элемент в список buttonInfo.Этот элемент является инициализированным, но пустым списком.Этот список не заполняется (по крайней мере, в коде, который вы предоставили).Итак, это:

buttonInfo.get(buttonInfo.size() - 1).get(rightButton)

эквивалентно:

buttonInfo.get(0).get(rightButton)

независимо от значения rightButton будет выдана ошибка,потому что buttonInfo.get(0) является пустым .

...