【问题标题】:How to create a custom iterator for a deck of cards? (Java) [duplicate]如何为一副纸牌创建自定义迭代器? (Java)[重复]
【发布时间】:2014-08-26 14:39:23
【问题描述】:

我正在尝试解决一个为我提供以下课程的问题。如何创建自定义迭代器类 DeckIterator 来帮助我迭代 Deck 类中的 Card[] deck 数组?

我有一个如下所示的 Card 类:

public class Card {

    private char suit;
    private int value;

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

我有一个像这样的 Deck 类:

public class Deck {

    private Card[] deck;
    private int idx;

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

非常感谢

【问题讨论】:

  • 你有什么尝试吗?
  • 你应该正确实现Iterable接口。 tutorials.jenkov.com/java-generics/implementing-iterable.html
  • @OliCharlesworth 我做到了,我知道我应该在 DeckIterator 类中实现可迭代和在 DeckIterator 类中的迭代器,但我不知道如何使用它在作为数组的卡片组中进行迭代。 ..:/请帮帮我
  • 为什么不使用 List 而不是数组?迭代器随列表免费提供
  • @wastl 我知道,但我正在尝试解决一个为我提供这些课程的问题,我需要使用我所拥有的。

标签: java iterator


【解决方案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" );
    }
}

西装可能被实现为一个枚举,可能是排名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多