2014-02-02 3 views
-4

Я повторяю список и помещаю его в содержимое по карте, но проблема заключается в том, что когда я возвращаю эту карту, я отправляю исключение, можете ли вы, пожалуйста, сообщить, в чем причина за ним .иЕ подводят java.lang.IndexOutOfBoundsException: индекс: 100, размер: 100 в моем списке размере 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()); 
} 

людей, пожалуйста, посоветуйте, как преодолеть от этого

+3

Каких исключений вы получаете? Не могли бы вы показать нам стек? Вы можете помочь нам здесь? – PakkuDon

+0

Если бы мне пришлось * угадывать * (что я делаю, так как вы делаете нас), вы получаете «ConncurrentModificationException», которое Javadoc сообщает вам, точно *, что произойдет, если вы измените структуру во время итерации через нее , –

+0

Я направляю исключение, не могли бы вы посоветовать, в чем причина этого. Я получаю java.lang.IndexOutOfBoundsException: Индекс: 100, Размер: 100, так как мой размер списка 100 – user3247872

ответ

0

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

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

По крайней мере, включите проверку перед тем, как попытаться получить доступ к элементу. Что-то вроде:

if (i >= pairList.size()) 
    break; 
+0

Я сделал это таким образом, пожалуйста, сообщите, правильно ли это. While (iterator.hasNext()) {if (i> = pairList.size()) break; if (sum == 0) {min = (int) p.key; max = (int) p.key; } – user3247872

+0

Это не похоже на соответствующий код. Я думаю, вам нужно прочитать некоторые основы, такие как петлевые конструкции. – esel

+0

проверьте сейчас, пожалуйста, – user3247872

0

Вашей проблемы здесь:

p = pairList.get(i); 

Если список вашего размера 100, затем дают индексы от 0 - 99.

+0

..Подробнее спасибо сейчас, как я могу это исправить, должен ли я поставить условие, можете ли вы посоветуете, что поможет понять? Большое спасибо – user3247872

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