Java: индекс массива вне границ - PullRequest
0 голосов
/ 07 февраля 2012

Я получаю это исключение:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
at Vindu.<init>(setevelger.java:64)
at setevelger.main(setevelger.java:22)

когда я запускаю этот код:

    public knapp seter[]=new knapp[100]; //knapp means button

    int rad=0; //rows
    int sete=0; //seats     
    int antallSeter=0; //number of seats
    for (int i=0;i<10;i++){
        for (int j=0;j<10;j++){
            seter[antallSeter]= new knapp("Rad "+(rad+1)+", Sete "+(sete+1));
            seter[antallSeter].setBackground(Color.GREEN);

            add(seter[antallSeter]); 
            antallSeter++;              
            if(j==10){
                sete=0;
                }else{              
                    sete++; 
                    }           
            }
        rad++;
        }   

    //creates an eventlistener
    Knappelytter lytteren = new Knappelytter();
    seter[antallSeter].addActionListener(lytteren);
    pack();     

и если я сделаю это:

public knapp seter[]=new knapp[120]; //knapp means button

Я получаю эту ошибку:

Exception in thread "main" java.lang.NullPointerException
at Vindu.<init>(setevelger.java:64)
at setevelger.main(setevelger.java:22)

Обе ошибки появляются во время выполнения при создании окна.

Итак, код должен создавать 100 кнопок и сохранять их в массиве, а каждая кнопка должна иметь номер строки и номер места.

Я застрял, я понятия не имею, где искать больше ..

Должен ли я, возможно, использовать arraylist?

Ответы [ 5 ]

2 голосов
/ 07 февраля 2012

В ваших циклах for значение antalSetter увеличивается до 100 в последнем цикле - первое исключение, если вы увеличиваете длину массива до 120 - вы получаете доступ к элементу с индексом 100, равным нулю.

1 голос
/ 07 февраля 2012

В вашем коде у вас есть этот код сброса:

if (j==10) {
    sete=0;
} else {
    sete++;
}

Однако, j == 10 никогда не может быть таким, поэтому sete никогда не будет сброшено до 0. Я не знаю, является ли это причиной исключения, но это определенно проблема с вашим кодом. Условие, вероятно, должно быть if (j==9) { ...

1 голос
/ 07 февраля 2012

Оба исключения происходят из-за того, что предпоследняя строка:

seter[antallSeter].addActionListener(lytteren);

находится за пределами двойной петли for, где antallSeter будет увеличено сверх числа существующих (1 st *).1007 * исключение) или заполненные (2 и исключение) индексы seter.

Если я правильно понимаю, и вы хотите добавить прослушиватель событий для каждой кнопки, вы можетеизменить на:

// ..

    if(j == 10) {
        sete=0;
    } else {              
        sete++; 
    }

    seter[antallSeter].addActionListener(new Knappelytter());

}
rad++;
// etc ..
0 голосов
/ 25 сентября 2015

Инициализировать Сетер с размером 101.

public knapp seter[]=new knapp[101];
0 голосов
/ 07 февраля 2012

После последнего цикла значение antallSeter равно 100. Это индекс за пределами строки:

seter[antallSeter].addActionListener(lytteren);

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

Knappelytter lytteren = new Knappelytter();
seter[antallSeter].addActionListener(lytteren);

Внутри внешней петли.

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