如何从其他类修改arraylist?JAVA

如何从其他类修改arraylist?JAVA,java,arraylist,Java,Arraylist,我正在编写一个扑克游戏,并将所有卡存储在类组中创建的arraylist中: 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++){

我正在编写一个扑克游戏,并将所有卡存储在类组中创建的arraylist中:

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);
        }
    }
}
公共类甲板{
ArrayList deck=新的ArrayList();
Deck(){//按顺序构建Deck。

对于(int suit=1;suit每个
手牌
都有自己的
牌组
。您希望在多个手牌中共享一个
牌组

我想你想要这样的东西:

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);
        }
    }
}
供参考

  • Java惯例是使用小写方法(例如,
    Draw
  • 在构造函数中初始化变量通常更清晰
  • 声明
    List myHand
    通常是首选,因为它具有更高的抽象级别

  • 我会在你的
    手上尝试这个
    方法
    Draw()
    ,它应该真正命名为
    Draw()


    一般来说,您不希望其他任何人干扰对象的内部状态。相反,您希望提供允许其他对象与其交互的方法,例如

    public class Deck {
    
        private 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);
                }
            }
        }
    
        public Card[] draw(int count) {
            Card[] cards = new Card[count];
            if (count < deck.size()) {
                for(int i = 0; i < count; i++){
                    cards[i] = deckObject.deck.remove(0);
                }        
            } else {
                throw new IllegalStateException("Can not with draw " + (count + 1) + " from deck that only has " + deck.size() + " cards");
            }
            return cards;
        }
    
    公共类甲板{
    private ArrayList deck=new ArrayList();
    Deck(){//按顺序构建Deck。
    
    对于(int suit=1;suit,因为您正在创建一个Deck对象的新实例。您不想这样做。将Deck对象传递到Draw方法中,或生成一个单实例Deck对象。您不显示编排应用程序的主类,但应该在其中创建一个Deck对象,然后根据需要传递它。谢谢!这样做了。有道理,谢谢
    Deck deck = new Deck();
    Hand hand1 = new Hand(deck);
    Hand hand2 = new Hand(deck);
    hand1.Draw();
    hand2.Draw();
    
        if (deckObject.deck.size() > 0) {        // Are there cards in the deck?
          myHand.add(deckObject.deck.remove(0)); // add the card removed from 
                                                 // the deck to the Hand.
        } else {
          break;                                 // No cards.
        }
        // deckObject.deck.remove(0);            // Already taken care of.
    
    public class Deck {
    
        private 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);
                }
            }
        }
    
        public Card[] draw(int count) {
            Card[] cards = new Card[count];
            if (count < deck.size()) {
                for(int i = 0; i < count; i++){
                    cards[i] = deckObject.deck.remove(0);
                }        
            } else {
                throw new IllegalStateException("Can not with draw " + (count + 1) + " from deck that only has " + deck.size() + " cards");
            }
            return cards;
        }