2015-05-08 4 views
1

Это мой код кратко:ArrayList ссылку на элемент и получить IndexOutOfBoundsException

public class FabianFerenc extends FogolyBase{ 

    ArrayList<Boolean> ellenfelValaszai = new ArrayList<Boolean>(); 


    private void deleteList(){ 
     for(int i=0;i<ellenfelValaszai.size();i++){ 
      ellenfelValaszai.remove(i); 
     } 
    } 

    @Override 
    public boolean masikEllenVall(int iFordulo) { 

     if(this.ellenfelValaszai.size()>0){ 
      System.out.println(this.ellenfelValaszai.get(iFordulo)); 
     } 

     if(this.ellenfelValaszai.size()>999){deleteList();} 
     return true; 
    } 

    @Override 
    public void masikMitMondott(int iFordulo, boolean bMasikValasza) { 
     this.ellenfelValaszai.add(bMasikValasza); 
    } 
} 

И когда я хочу, чтобы записать все содержимое из списка «ellenfelValaszai» в методе «masikEllenVall», и я все время получить это тзд ошибка:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 
    at java.util.ArrayList.rangeCheck(ArrayList.java:638) 
    at java.util.ArrayList.get(ArrayList.java:414) 
    at Foglyok.FabianFerenc.masikEllenVall(FabianFerenc.java:51) 

переменная iFordulo счетчик, который отсчет от 0 до 999.

+3

Трассировка стека довольно понятна. В отличие от вашего кода. – Mena

+0

Если я добавлю 2 в «iFordulo», то тоже получаю ошибку. – PumpkinSeed

+0

Я бы порекомендовал проверять, что элементы удаляются из 'List'. Вам может быть лучше зацикливаться назад или лучше всего просто называть 'clear()' – copeg

ответ

2

Измените код следующим образом:

@Override 
    public boolean masikEllenVall(int iFordulo) { 

    if(this.ellenfelValaszai.size() > iFordulo){ //if iFordulo always >= 0 it's sufficient check to be sure array isn't empty 
     System.out.println(this.ellenfelValaszai.get(iFordulo)); 
    } 

    if(this.ellenfelValaszai.size()>999){deleteList();} 
    return true; 
} 

также прочитать другие ответы, особенно о том, как очистить массив.

+0

Это хорошо, теперь мне нужно выяснить, почему у меня есть список только одного элемента. – PumpkinSeed

1

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 говорит вам, что размер массива равен 1. Индексирование элементов в массивах Java начинается с 0, поэтому к одному элементу можно обращаться через ellenfelValaszai.get(0);, но вы пытаетесь получить этот элемент с помощью index = 1. Отсюда и ошибка.

1

Ошибка, которую вы указали в том, что вы пытаетесь получить доступ к элементу с индексом 1, пока в списке есть только один элемент (поэтому самый большой индекс, который вы можете использовать в списке, равен 0). Кроме того, я рекомендую вам заменить метод deleteList() простым ellenfelValaszai.clear().

+0

Понимаю, я переключаю его на ясный, спасибо. – PumpkinSeed

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