繁体   English   中英

通过ArrayList Java进行无限循环迭代

[英]Infinite Loop iterating through ArrayList Java

我试图创建自己的迭代器,该迭代器遍历由MenuItems组成的Menu对象的ArrayList。 每个menuItem具有4个值。 我试图遍历arrayList,只返回具有类别值MainDish的值。 我不断陷入无限循环。 它必须在实现迭代器接口的迭代器的next()方法中,但是我终生无法找到错误所在。 它必须是我增加currentIndex的位置,但无法弄清楚。 任何和所有帮助表示赞赏。

迭代器类:

package menu;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;


public class ItemIterator implements Iterator<MenuItem> {
private ArrayList<MenuItem> menuList;
private int currentIndex;
private String type;

public ItemIterator(ArrayList<MenuItem> menuList, String type) {
    this.menuList = menuList;
    this.type = type;
    }

@Override
public boolean hasNext() {
    return !(menuList.size() == currentIndex);
}

@Override
public MenuItem next() {

boolean found = false;

    if(hasNext() && !found)
        if(menuList.get(currentIndex).getCategory().equals(type))   
            found = true;
        else
            currentIndex++;         


    if(found = true)
        return menuList.get(currentIndex);
    else
        throw new NoSuchElementException();
    }   


@Override
public void remove() {
    // TODO Auto-generated method stub

}

 }

这是我的主要内容:

     public static void main(String[] args) {


    MenuItem item1 = new MenuItem("burger", mainDish, false, 10);
    MenuItem item2 = new MenuItem("sandwhich", appetizer, true, 5);

    Menu newMenu = new Menu();

    newMenu.add(item1);
    newMenu.add(item2);




     Iterator<MenuItem> itr = newMenu.getMenuIterator(); 
     System.out.println("ALL MENU ITEMS"); 


     while (itr.hasNext()) 
     { 
     System.out.println(itr.next()); 
     } 

    itr = newMenu.getItemIterator(mainDish); 
     System.out.println("ALL MAIN DISH ITEMS"); 

     while (itr.hasNext()) 
     { 
     System.out.println(itr.next()); 
     } 
  }

无论当前项目是否匹配,next()方法都需要使currentIndex递增。 按照书面规定,一旦达到实际匹配,就会出现无限循环。

顺便说一句,按照书面规定,没有理由不使用常规迭代器并检查结果。 如果您真正想要的是一个可以直接跳到下一个匹配项的迭代器,则需要在next()方法内添加一个增量循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM