学习Java - 对某些代码感到困惑

时间:2012-02-01 20:43:03

标签: java

我正在阅读一本关于Java的书,到目前为止我已经理解了大部分内容。但是,我遇到了一些我似乎无法弄清楚的代码。这是一个简单的二十一点游戏:

public class CardDeckTest {

    public static void main(String args[]) {
        CardDeck deck = new CardDeck();
        System.out.println("Deck Listing:");
        deck.list();
        Card card = deck.deal();
        System.out.println("Dealt " + card);
        card = deck.deal();
        System.out.println("Dealt " + card);
        System.out.println("Top index: " + deck.getTopIndex());
        deck.reset();
        System.out.println("Reset deck... Top index: " + deck.getTopIndex());
        card = deck.deal();
        System.out.println("Dealt " + card);
        System.out.println("The last card is " + deck.getCard(deck.getNumCards() - 1));
    }
}

令我感到困惑的是Card card = deck.deal();到目前为止,我看到的线条与第二条线条类似,其中包含“新”。这条线在做什么?那里为什么没有“新”。

我相信它在CardDeck中指的是

public Card deal() {
        Card dealt = cards[top];
        top ++;
        if (top >= cards.length) reset();
        return dealt;
    }

谢谢!

7 个答案:

答案 0 :(得分:2)

它正在调用CardDeck的特定实例上的交易方法,并返回一个存储在本地变量卡中的Card实例。这有帮助吗?

答案 1 :(得分:2)

方法deal()会返回Card个实例,您可以在

行中看到
return dealt;

Card个实例已分配给card

答案 2 :(得分:1)

CardDeck类维护一系列卡片,可以按随机顺序排列。

当您的代码出现时:

Card card = deck.deal();

它调用成员函数来检索数组中的下一张牌,并将牌组指针前进到下一张牌。

该功能,附有适当的评论:

public Card deal() {
        Card dealt = cards[top];    // get card from top (initially 0).
        top ++;                     // advance top so next time we get next card.
        if (top >= cards.length)    // deck empty, then reshuffle.
            reset();
        return dealt;               // give card to caller.
    }

答案 3 :(得分:1)

某处必须有new,我猜你在调用

new CardDeck()

它正在创建cards[]并填充内容。因为已经创建了数组中的Card,所以您不需要创建一个新的,而只是声明对它的引用。

答案 4 :(得分:0)

Deck已经在代码顶部分配了卡片对象。这种方法只是返回对甲板顶部卡片的引用,然后递增甲板顶部。这可以防止在后续调用时重新绘制卡。当顶部超出甲板限制时,它会重置顶部,这样你就可以再次抽牌了。

答案 5 :(得分:0)

Card中已存在cards[top];它已经创建。以下行导致名为card的{​​{1}}类型的变量引用它:

Card

在Java中,许多变量可以引用到同一个对象。仅仅因为你声明一个引用并不意味着你需要一个Card card = deck.deal(); 对象:

new

答案 6 :(得分:0)

该行

Card card = deck.deal()

将Card对象分配给变量'card'。当你看到'new'的实例时:

CardDeck deck = new CardDeck();

它只是将CardDeck对象分配给变量'deck'。

两者之间的主要区别在于您正在创建一个不存在的新CardDeck对象,并将其分配给变量“deck”。对于deck.deal(),您将获得一个存在于某处的Card对象,并将其分配给“card”

希望有所帮助