我想創建一個自己的迭代器,它循環訪問由MenuItems組成的Menu對象的ArrayList。每個menuItem有4個值。我試圖遍歷arrayList,只返回具有類別值MainDish的值。我一直得到一個無限循環。它必須位於實現迭代器接口的迭代器的next()方法中,但是我不能在我的生活中找到錯誤的位置。它必須是我增加currentIndex的位置,但無法弄清楚。任何和所有的幫助表示讚賞。通過ArrayList迭代的無限循環Java
迭代器類:
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());
}
}
'if(found = true)'< - 這裏。應該是'=='。或者只是「如果(找到)」。 – fge
爲什麼要使用迭代器?您可以更簡單地使用for循環的用戶嗎? – TheBrenny
啊,把它改爲只要(發現)有幫助,但現在我得到了沒有這樣的元素例外,我推它作爲默認情況。想法? –