尽管在Java中创建了两个不同的示例,但所有的牌都被添加到同一手牌中

dm7nw8vv  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(91)

我正在用Java创建一个21点游戏。我需要有多个玩家,需要一个手类来存储从牌组中抽出的牌。我有一个手类,但即使我创建了两个单独的手示例,向任何一只手发一张牌也会将它们添加到两只手。
这是我的手工类代码:

public class Hand2 {
    
    private List<Cards> hand;
    private Cards cards;
    private int handValue;
    
    public Hand2(List<Cards> hand) {
        
        this.hand = hand;   
    }
    
    private Cards addCard(Deck deck) {
        hand.add(deck.dealCard());
        return cards;
    }
    
    public int getHandValue() {
        for (Cards cards : hand ) {
            handValue += cards.getValue();
        }
        return handValue;
    }

    public String toString() {
        return "Hand: " + hand;
    }

下面我来测试一下:

public static void main(String[] args) { //Testing
     List<Cards> cards = new ArrayList<Cards>();
     
     Deck deck = new Deck();
        deck.shuffle();
                    
        Hand2 hand = new Hand2(cards);
        Hand2 hand2 = new Hand2(cards);
        
        hand.addCard(deck);
        hand2.addCard(deck);
        hand2.addCard(deck);
        System.out.println(hand2);
            System.out.println(hand.getHandValue());
        System.out.println(hand2.getHandValue());
   
 }

终端:

Hand: [Three of Diamonds, Four of Clubs, Jack of Hearts]
17
17

但我得到的一手牌值是一样的。

e4yzc0pl

e4yzc0pl1#

正如一些人已经注意到的,所有人都共享相同的卡片列表。我在代码中看到的另一个问题是,当你应该使用局部变量时,你却使用了字段(cardshandValue)。
试试这个:

public class Hand2 {
    private final List<Cards> hand = new ArrayList<>();

    public Hand2() {
    }
    
    private Cards addCard(Deck deck) {
        Cards cards = deck.dealCard();
        hand.add(cards);
        return cards;
    }
    
    public int getHandValue() {
        int handValue = 0;
        for (Cards cards : hand ) {
            handValue += cards.getValue();
        }
        return handValue;
    }

    @Override
    public String toString() {
        return "Hand: " + hand;
    }

相关问题