gpt4 book ai didi

java - 如何修改来自不同类的数组列表? java

转载 作者:行者123 更新时间:2023-11-29 05:32:36 24 4
gpt4 key购买 nike

我正在编写一个扑克游戏,并将所有纸牌存储在 Deck 类中创建的数组列表中:

public class Deck {

ArrayList<Card> deck = new ArrayList<Card>();

Deck(){ //Build the deck in order.

for(int suit = 1; suit <= 4; suit++){
for(int rank = 1; rank <= 13; rank++){
Card card = new Card(rank, suit);
deck.add(card);
}
}
}

...

我想要另一个类——Hand——从数组列表中抽取前五个元素并将它们放入一个名为 myHand 的新数组列表中:

public class Hand {

ArrayList<Card> myHand = new ArrayList<Card>();
Deck deckObject = new Deck();

public void Draw(){ //Draws the top 5 cards of the deck and puts them in your hand ArrayList.
for(int i = 0; i <= 4; i++){
myHand.add(deckObject.deck.get(0));
deckObject.deck.remove(0);
}
}

...到目前为止,一切都很好。当我显示主类中的手牌 ArrayList 时,我得到了牌组中的前五张牌。但是,当我显示 Deck 类中的牌组时(在调用 Draw() 方法之后),所有 52 张牌仍然存在。

如果我在 Hand 类中创建一个 getDeck() 方法并调用它,前五张牌将按预期移除...

所以看起来我在这两个类之间进行了单向通信;当我从 Hand 类修改 ArrayList 时,Deck 类并不知道它,而且似乎每个类都保留一个单独版本的 ArrayList。这是怎么回事?

最佳答案

每个Hand有自己的Deck .你想分享一个Deck在许多人手中。

我想你想要这样的东西:

public class Hand {

Deck deck;
ArrayList<Card> myHand = new ArrayList<Card>();

Hand(Deck deck) {
this.deck = deck;
}

public void removeCard(Card card) {
deckObject.deck.remove(card);
}

public void Draw() {
for(int i = 0; i <= 4; i++) {
myHand.add(deckObject.deck.get(0));
deckObject.deck.remove(0);
}
}
}

然后

Deck deck = new Deck();
Hand hand1 = new Hand(deck);
Hand hand2 = new Hand(deck);
hand1.Draw();
hand2.Draw();

仅供引用

  1. Java 惯例是小写方法(例如 Draw )。
  2. 构造函数中初始化变量通常更清晰。
  3. 声明List<Card> myHand通常是首选,因为它具有更高的抽象级别。

关于java - 如何修改来自不同类的数组列表? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com