Java 正在尝试添加5个不同的“;卡片“;到一个数组,但它添加了5张相同的卡

Java 正在尝试添加5个不同的“;卡片“;到一个数组,但它添加了5张相同的卡,java,arrays,Java,Arrays,请,任何帮助都将非常感谢,我相信这应该是一个简单的问题 我是一名大学生,对Java非常陌生,正在尝试一些实验课程 这是一个非常简单的扑克程序,它只需要: 按指定顺序生成一副52张卡片(已投入使用) 读入玩家数量和玩家姓名(已经可以使用) 从牌组顶部向每位(2)玩家和庄家发5张牌(不确定是否有效) 然后通过以下输出显示卡: 玩家数量:2人 球员一:本垒打 玩家2:Marge 荷马有AH4H 7H 10H KH Marge有2H 5H 8H JH AD 经销商有3H 6H 9H QH 2D 有几类

请,任何帮助都将非常感谢,我相信这应该是一个简单的问题

我是一名大学生,对Java非常陌生,正在尝试一些实验课程

这是一个非常简单的扑克程序,它只需要: 按指定顺序生成一副52张卡片(已投入使用) 读入玩家数量和玩家姓名(已经可以使用) 从牌组顶部向每位(2)玩家和庄家发5张牌(不确定是否有效) 然后通过以下输出显示卡:

玩家数量:2人 球员一:本垒打 玩家2:Marge

荷马有AH4H 7H 10H KH Marge有2H 5H 8H JH AD 经销商有3H 6H 9H QH 2D


有几类-庄家,玩家,牌组,手牌,牌

现在我得到的输出是:

玩家数量:2人 球员一:本垒打 玩家2:Marge

荷马有KH 玛姬有广告 经销商拥有2D


经销商类的相关代码:

public class Dealer {
    public static void main(String[] args)
    {   new Dealer();  }

    private Deck deck = new Deck();
    private Hand hand = new Hand();
    public ArrayList<Player> players = new ArrayList<Player>();

    ....

    private void deal()
    {
        for(int i = 0; i < 5; i ++) {
            for (Player player : players)
                player.add(next());
            add(next());  
        }
    }    //  deal five cards to each player and the dealer
         //  in the stated order

    private void add(Card card)
    {   hand.add(card);    }

    private Card next()
    {   return deck.next(); }

    private void show()
    {   
        for (Player player : players)
            System.out.println(player.getName() + " has " + player.showHand());
        System.out.println("Dealer has " + hand.toString());
    }
}
public class Player{
    private String name;
    private int number;
    private Hand hand = new Hand();
    ....
    public void add(Card card)
    {   hand.add(card); }

    public String showHand()
    {
        String show = "" + hand.toString();
        return show;
    }
public class Hand {
    private Card[] cards = new Card[5];
    ....
    public void add(Card card)
    {
        for (int i = 0; i < cards.length; i++)
            cards[i] = new Card(card.valueReturn(), card.suitReturn());
    }

    public String toString()
    {
        String display = "";
        display = cards[0].toString() + cards[1].toString() + cards[2].toString() + cards[3].toString() + cards[4].toString();
        return display;
    }
}
public class Deck{
    private Card[] cards = new Card[52];
    private int i = 0, deck = 0;
    private char[] suits = {'H', 'D', 'C', 'S'};

    public Deck()
    {
        for (int suit = 0; suit < 4; suit++){
            for(int value = 1; value <= 13; value++){
                 cards[deck++] = new Card(value, suits[suit]);
            } 
        }        
    }  // create the cards in the stated order and add them to the deck

    //  This function works by side effect
    //  It uses the standard "next" pattern you will see next week
    public Card next()
    {   return cards[i++];    }
}
public class Card{

    private int cardValue;
    private char suit;

    public Card(int cardValue, char suit)
    {   
        this.cardValue = cardValue;
        this.suit = suit;   
    }

    public String valueDisplay()
    {
        switch (cardValue)
        {
            case 1: return "A";
            case 11: return "J";
            case 12: return "Q";
            case 13: return "K";
            default: return "" + cardValue;
        }
    }

    public int valueReturn()
    {
        this.cardValue = cardValue;
        return cardValue;
    }

    public char suitReturn()
    {
        this.suit = suit;
        return suit;
    }

    public String toString()
    {
        return valueDisplay() + suit + " ";
    }
}
以下是手册类中的相关代码:

public class Dealer {
    public static void main(String[] args)
    {   new Dealer();  }

    private Deck deck = new Deck();
    private Hand hand = new Hand();
    public ArrayList<Player> players = new ArrayList<Player>();

    ....

    private void deal()
    {
        for(int i = 0; i < 5; i ++) {
            for (Player player : players)
                player.add(next());
            add(next());  
        }
    }    //  deal five cards to each player and the dealer
         //  in the stated order

    private void add(Card card)
    {   hand.add(card);    }

    private Card next()
    {   return deck.next(); }

    private void show()
    {   
        for (Player player : players)
            System.out.println(player.getName() + " has " + player.showHand());
        System.out.println("Dealer has " + hand.toString());
    }
}
public class Player{
    private String name;
    private int number;
    private Hand hand = new Hand();
    ....
    public void add(Card card)
    {   hand.add(card); }

    public String showHand()
    {
        String show = "" + hand.toString();
        return show;
    }
public class Hand {
    private Card[] cards = new Card[5];
    ....
    public void add(Card card)
    {
        for (int i = 0; i < cards.length; i++)
            cards[i] = new Card(card.valueReturn(), card.suitReturn());
    }

    public String toString()
    {
        String display = "";
        display = cards[0].toString() + cards[1].toString() + cards[2].toString() + cards[3].toString() + cards[4].toString();
        return display;
    }
}
public class Deck{
    private Card[] cards = new Card[52];
    private int i = 0, deck = 0;
    private char[] suits = {'H', 'D', 'C', 'S'};

    public Deck()
    {
        for (int suit = 0; suit < 4; suit++){
            for(int value = 1; value <= 13; value++){
                 cards[deck++] = new Card(value, suits[suit]);
            } 
        }        
    }  // create the cards in the stated order and add them to the deck

    //  This function works by side effect
    //  It uses the standard "next" pattern you will see next week
    public Card next()
    {   return cards[i++];    }
}
public class Card{

    private int cardValue;
    private char suit;

    public Card(int cardValue, char suit)
    {   
        this.cardValue = cardValue;
        this.suit = suit;   
    }

    public String valueDisplay()
    {
        switch (cardValue)
        {
            case 1: return "A";
            case 11: return "J";
            case 12: return "Q";
            case 13: return "K";
            default: return "" + cardValue;
        }
    }

    public int valueReturn()
    {
        this.cardValue = cardValue;
        return cardValue;
    }

    public char suitReturn()
    {
        this.suit = suit;
        return suit;
    }

    public String toString()
    {
        return valueDisplay() + suit + " ";
    }
}
Hand.add()中

for(int i=0;i
您正在创建五张值完全相同的新卡

人们可能会想到(丑陋但快速修复):

for(int i=0;i

此外,对于这些情况,学习使用调试器并逐步观察系统状态非常有用。

您可以发布
deck.next()
的代码吗?您可以提供一个简单的问题示例吗?看来
Deck.next()
很重要,但我看不到。当您在调试器中单步执行代码时,您会看到什么?您使用的代码在何处填充数据组?只需注意:删除这些行
this.x=x来自
Card
类的返回方法,因为它们什么都不做。
addCard
方法将相同的
Card
添加到
Hand
中5倍,添加了组码@Baz,不,addCard方法是将5张不同的牌拉到每个玩家的手上。。我试着在Dealer类中使用for循环,也在Hand类中使用了for循环,但似乎都不起作用。谢谢@SJuan76&Baz最后一个问题-在您的回答中,我可以问一下:cards[I]=card;这是否只是说如果卡片索引“i”处的对象为空,那么卡片索引“i”处的对象将是一张新卡片?为什么“return”必须自己使用,后面什么都没有?Thankyou@user1603861如果
卡[i]==null
有效,则手牌最多有
i
卡。因此,您将参数
card
放入此插槽,并
返回
(退出medhod),因为您不想将
card
也放入以下插槽。您不需要创建新对象(需要为此使用
new card
),而是复制引用。在
cards[i]=card
之后,
cards[i]
card
都指向同一个唯一的对象。