我正在阅读一本关于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;
}
谢谢!
答案 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”
希望有所帮助