2014-02-21 64 views
0

我想創建一個自己的迭代器,它循環訪問由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()); 
    } 
    } 
+0

'if(found = true)'< - 這裏。應該是'=='。或者只是「如果(找到)」。 – fge

+0

爲什麼要使用迭代器?您可以更簡單地使用for循環的用戶嗎? – TheBrenny

+0

啊,把它改爲只要(發現)有幫助,但現在我得到了沒有這樣的元素例外,我推它作爲默認情況。想法? –

回答

1

下一個()方法需要增加CURRENTINDEX當前項是否匹配。正如所寫的,只要你達到真正的比賽,你就會得到一個無限循環。

順便說一句,正如所寫,沒有理由不使用常規迭代器並檢查結果。如果你真正想要的是一個跳到下一個匹配的迭代器,你需要在next()方法中添加一個增量循環。

+0

我現在得到了沒有這樣的元素例外,我把它作爲默認情況。 –

+0

現在,只要當前元素不匹配,並且您調用next(),就會得到NoSuchElementException。 –

+0

我想我的下一個任務是弄清楚循環結構的位置 –