2014-07-05 45 views
-2

我想解决一个问题,给我提供了以下类。我如何创建一个自定义迭代器类DeckIterator,这将帮助我迭代Deck类中的Card[] deck数组?如何为一副纸牌创建自定义迭代器? (Java)

我有一个卡类,看起来像这样:

public class Card { 

    private char suit; 
    private int value; 

    public Card (char s, int v) 
    { 
     this.suit = s; 
     this.value = v; 
    } 
} 

而且我有一个甲板类,看起来像这样:

public class Deck { 

    private Card[] deck; 
    private int idx; 

    public Deck (int size) 
    { 
     this.deck = new Card[size]; 
     this.idx = 0; 
    } 
} 

非常感谢

+0

你尝试过什么吗? –

+0

你应该正确地实现Iterable接口。 http://tutorials.jenkov.com/java-generics/implementing-iterable.html – Juvanis

+0

@OliCharlesworth我做过了,我知道我应该在DeckIterator类中实现甲板类和迭代器中的迭代,但我不知道如何使用它在一系列阵列中迭代...:/请帮助我 – Joe

回答

1

一下添加到类Deck implements Iterable<Card>

public Card getCard(int i){ 
    return deck[i]; 
} 

public Iterator<Card> iterator(){ 
    return new DeckIterator(this); 
} 

public class DeckIterator implements Iterator<Card> { 
    private Deck d; 
    private int pos; 
    DeckIterator(Deck d){ 
     this.d = d; 
    } 

    @Override 
    public boolean hasNext(){ 
     return pos < d.deck.length; 
    } 

    @Override 
    public Card next(){ 
     if(pos >= d.deck.length){ 
      throw new NoSuchElementException("no more cards in deck"); 
     } 
     return d.getCard(pos++); 
    } 

    @Override 
    public void remove(){ 
     throw new UnsupportedOperationException("not implemented"); 
    } 
} 

西装可能会作为枚举实现,可能会排名。