2014-02-02 3 views
-1

Я получаю исключение java.lang.IndexOutOfBoundsException, не могли бы вы посоветовать, в чем причина этого. Я получаю java.lang.IndexOutOfBoundsException: Index: 100, Size: 100 as my размер списка 100Получение индексов из связанного исключения

for(Map.Entry<Long, Integer> entries : result.entrySet()){ 
    pairList.add(new Pair(entries.getKey(), entries.getValue())); 
} 

int sum = 0; 
int min = -1; 
int max = -1;   

int i = 0; 
Pair p = pairList.get(i); 

@SuppressWarnings("rawtypes") 
//Iterator iterator = pairList.iterator(); 
Iterator iterator = pairList.listIterator(); 

while (iterator.hasNext()) { 
    if(sum == 0) { 
     min = (int) p.key; 
     max = (int) p.key; 
    } 
    sum += p.value; 
    if(sum < BARRIER){ 
     max = (int) p.key; 
    } else { 
     if(sum > BARRIER){ 
      i--; 
     } else { 
      max = (int) p.key; 
     } 
     System.out.println(min+"_"+max); 
     result1.put(min,max); 

     sum = 0; 

    } 
    i++; 
    p = pairList.get(i); 
} 

System.out.println("#########"); 

System.out.println(result1.size()); 
for (Map.Entry<Integer, Integer> entry : result1.entrySet()) { 
    System.out.println(entry.getKey() + "/" + entry.getValue()); 
} 

Теперь я получаю исключение в точке p = pairList.get(i); Массивы равны нулю индексируются. например 100-элементный массив действительно будет иметь допустимый диапазон индексов [0,99]. Я предполагаю, что это происходит на линии p = pairList.get (i); теперь, пожалуйста, советую, как преодолеть это

+2

Что случилось с вашим [предыдущей нити] (http://stackoverflow.com/questions/21508097/getting-exception-while-putting- список-данных в самой карте)? – PakkuDon

+0

Не задавайте один и тот же вопрос не лучшим образом, чтобы привлечь внимание. Если вы не получите ответы на свой первый вопрос, подумайте над редактированием и добавлением дополнительной информации. – Barranka

+0

Добавьте несколько комментариев в свою программу, чтобы мы могли понять –

ответ

0

Вы должны использовать итератор, чтобы получить следующий элемент списка, а не использовать парList.get (i). использовать

p =iterator.next(); 
0

Проблема состоит в сочетании

while (iterator.hasNext())  
    { 

     ... 
     i-- 
     .... 
     i++; 
     p = pairList.get(i); 

Пожалуйста, прочитайте, как использовать Iterator

http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html

это сочетание hasNext и next. В качестве альтернативы, используйте оператор foreach.

for (Pair p : pairList) { 

. Если вам нужно перебирать доступ списка случайным образом с помощью индекса (i++ или i--), вы должны защитить свой код с

if (i>=0 && i<pairList.size()) p = pairList.get(i); 
else break; //??exit?? 

обратите внимание на метод hasNext возвращает истину, если не перебирать итератора с next метод

p = pairList.next(); 

Наконец, в коде

while(pairList.hasNext()) 

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

while(true) 

вы определены "break"

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