0

下面是我的学习目标。我开始了,但我真的不知道从这里到哪里去实现 main 中的程序。我将不胜感激任何帮助!

客观的:

  • 将 Iterator 对象添加到卡片集合
  • 通过创建私有内部类将迭代器添加到集合中。
  • 您可以使用任何合适的内部类类型
  • 枚举器和迭代器使用较大的数字来确定集合何时更改。
  • 实现正确的方法、接口,并为与 Java API 一致的类扩展适当的类。

    public class CardCollection {
    
    private ArrayList<Card> cards;
    private ArrayList<Note> notes;
    
    public CardCollection() { //constructor initializes the two arraylists
      cards = new ArrayList<Card>();
      notes = new ArrayList<Note>();
     }
    
    private class Card implements Iterable<Card> { //create the inner class
    
        public Iterator<Card> iterator() { //create the Iterator for Card
            return cards.iterator();
        }
    }
    
    private class Note implements Iterable<Note> { //create the inner class
    
        public Iterator<Note> iterator() { //create the Iterator for Note
            return notes.iterator();
        }
    
    }
    
    public Card cards() {
        return new Card();
     }
    
     public Note notes() {
         return new Note();
     }
    
     public void add(Card card) {
         cards.add(card);
     }
    
     public void add(Note note) {
         notes.add(note);
     }
    
    }
    
4

2 回答 2

2

您在这里有两个概念,我认为您可能会混淆。如果您可以迭代某些内部元素,则为 Iterable 对象。

因此,如果我有一个装有物品的购物车,我可以遍历我的杂货。

public class ShoppingCart implements Iterable<GroceryItem>
{
   public Iterator<GroceryItem> iterator()
   {
      // return an iterator
   }
}

所以为了使用这个功能,我需要提供一个迭代器。在您的代码示例中,您正在重用 ArrayList 中的迭代器。从您的练习描述中,我相信您需要自己实施一个。例如:

public class GroceryIterator implements Iterator<GroceryItem>
{
  private GroceryItem[] items;
  private int currentElement = 0;

  public GroceryIterator(GroceryItem[] items)
  {
    this.items = items;
  }

  public GroceryItem next() // implement this
  public void remove() // implement this
  public boolean hasNext() // implement this
}

所以我给了你一个关于构造函数/成员变量的提示。完成这个类之后,你的 Iterable 类(我的 ShoppingCart)将返回我的新迭代器。

作业建议为您的自定义迭代器使用私有内部类。

祝你好运

于 2012-07-09T21:10:19.740 回答
1
  • 可迭代对象通常是集合。CardCollection 比 Card 更适合
  • 公共方法 card() 和 notes() 返回类型 Card 和 Note 是私有的。我认为这些都是公开的。
  • 我认为方法 cards() 和 notes() 旨在返回迭代器。
于 2012-07-09T20:54:36.357 回答