java - 创建一副牌并洗牌

标签 java

我已经被困在这个问题上有一段时间了,目标是创建一个数组来容纳卡片,一旦我创建了数组,就把它们打印出来,唯一正在打印的卡片就是红心之王。为什么不迭代?

public class Card
{
    // Card suits (provided for your convenience - use is optional)
    public static final int SPADES   = 0;
    public static final int HEARTS   = 1;
    public static final int CLUBS    = 2;
    public static final int DIAMONDS = 3;

    // Card faces (provided for your convenience - use is optional)
    public static final int ACE      = 1;
    public static final int TWO      = 2;
    public static final int THREE    = 3;
    public static final int FOUR     = 4;
    public static final int FIVE     = 5;
    public static final int SIX      = 6;
    public static final int SEVEN    = 7;
    public static final int EIGHT    = 8;
    public static final int NINE     = 9;
    public static final int TEN      = 10;
    public static final int JACK     = 11;
    public static final int QUEEN    = 12;
    public static final int KING     = 13;




    // define fields here
    private static int suit;
    private static int val;
    private String[] suits = {"Clubs", "Spades", "Diamonds", "Hearts"};
    private String[] vals = {"Ace","2", "3", "4", "5", "6", "7", 
            "8", "9", "10", "Jack", "Queen", "King" };

    // This constructor builds a card with the given suit and face, turned face down.
    public Card(int suit, int val)
    {

        this.val = val;
        this.suit = suit;

    }

    public @Override String toString()
    {
        return vals[val] + " Of " + suits[suit];
    }

    // This method retrieves the suit (spades, hearts, etc.) of this card.
    public int getSuit()
    {

        return this.suit;

    }

    // This method retrieves the face (ace through king) of this card.
    public int getFace()
    {
//      return this.val;

        switch(val)
        {
        case 0 : return 1;
        case 1 : return 2;
        case 2 : return 3;
        case 3 : return 4;
        case 5 : return 6;
        case 6 : return 7;
        case 7 : return 8;
        case 8 : return 9;
        case 9 : return 10;
        case 10 : return 10;
        case 12 : return 10;
        default : return 0;
        }
    }








}`


import java.util.ArrayList;
import java.util.Random;
// This class represents the deck of cards from which cards are dealt to players.
public class Deck
{
    //array
    public static Card[] cards; 
//  private static ArrayList<Card> cards;

    int i;
    int counter;


    // This constructor builds a deck of 52 cards.
    Deck()
    {
        i = 51;
        //array implementation 
        cards = new Card[52];
        int x = 0;


        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 13;j++)
            {

                //Array implementation 
                cards[x] = new Card(i,j);
                x++;
            }
        }


    }




    // This method takes the top card off the deck and returns it.
    public Card deal()
    {

        //Array implementation 
        int index = 0;
        Card temp = cards[index];

        return temp;

    }


    // this method returns true if there are no more cards to deal, false otherwise
    public boolean isEmpty()
    {
        if(cards.length == 0)
        {
            return true;
        }
        return false;
    }

    //this method puts the deck int some random order
//  public void shuffle()
//  {
//      for(int i = 51; i > 0; i--)
//      {
//          int rand = (int) (Math.random() * (i+1));
//          Card temp = this.cards[i];
//          this.cards[i] = cards[rand];
//          cards[rand] = temp;
//      }
//  
//  }


}


public class BlackJack extends Deck
{
    public static void main(String []args)
    {
        System.out.println("Ready to play a game of BlackJack?");

        Deck deck = new Deck();
        for(int i = 0; i < cards.length;i++)
        {
            System.out.println(cards[i]);
        }

最佳答案

问题是由以下原因引起的:

// define fields here
private static int suit;
private static int val;

因为它们是静态的,所以所有 Card 实例都共享它们,因此它们都将具有最后设置的值。消除静电。

关于java - 创建一副牌并洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837989/

相关文章:

java - 将 Powermock 与 Weld 混合使用?

java - 为什么没有找到休息终点?

java - Git 流 : How to configure a one-click release process in Jenkins?

java - 如何从json中提取所有变量名称?

java - 如何比较Java中三个数组列表的大小?

原始以太网的 Java 库

java - 使用 OPC 基金会 Java 堆栈进行浏览

Java 9 迁移问题 - 包 com.mymodule 在未命名模块中声明,模块 'newmodule' 无法读取它

java - 这是什么设计模式?适配器?

java - 简单的节点发现方法