2015-05-27 4 views
-1

Это мой код:NoSuchElementException ошибка итератора AnyLogic

Iterator<H> iter = ((Main) getOwner()).eH.iterator(); 
    while (iter.hasNext()) { 
     if (iter.next().z.c > p_l) { 
      if (r) { 
       if (iter.next().R) { 
        if (iter.next().p <= 0.7 * s && iter.next().c_l >= p_l) { 
         if (s_h == null) { 
          s_h = iter.next(); 
         } else { 
          if (iter.next().p <= s_h.price) { 
           s_h = iter.next(); 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

, но я получаю эту ошибку:

Error during model startup: 
java.util.NoSuchElementException 
java.util.NoSuchElementException 
    at java.util.ArrayList$Itr.next(ArrayList.java:839) 
    at d_w.P.I(P.java:681) 
    at d_w.P.checkIfI(P.java:649) 
    at d_w.Main.initModelStructure(Main.java:1072) 
    at d_w.Main.onStartup(Main.java:2775) 
    at d_w.Main.start(Main.java:2765) 
    at com.anylogic.engine.Engine.start(Unknown Source) 
    at com.anylogic.engine.ExperimentSimulation.r(Unknown Source) 
    at com.anylogic.engine.ExperimentSimulation.run(Unknown Source) 
    at d_w.Simulation.executeShapeControlAction(Simulation.java:111) 

Я действительно не знаю, почему я получаю эту ошибку любое предложение высоко ценится спасибо аванс

+1

** И что именно вы хотите достичь с помощью этого куска кода! ** –

+0

это всего лишь часть более крупного кода. Я пытаюсь имитировать поведение агента, чтобы найти дом из доступных домов. Извините, t использовал полное слово, потому что его экзамен и я не хочу, чтобы мой ученик увидел код :) –

+0

вы вызываете itr.next() столько раз, убедитесь, что у вас достаточно количества предметов в вашей коллекции, к которым вы приложили итератор. –

ответ

0

Вызов .next() будет извлекать следующий элемент и продвигать итератор. У вас есть несколько вызовов .next() без проверки наличия следующего элемента.

Если вы хотите продолжать использовать один и тот же элемент, что .next() сначала возвратил, а затем заменить первый .next() с H next = iter.next(), а затем получить доступ к переменным next.

0

Каждый раз, когда вы вызываете next(), вы не получаете один и тот же элемент, вместо этого вы переходите к следующему элементу итератора. Вы должны сохранить это значение переменной и использовать ее.