java - 在 Java 中使用 3 维数组的卡片组

标签 java for-loop random

我正在制作一副带有 3 维数组的纸牌。但是当我调用随机卡片方法时,它说卡片数组有一个空值,即使我应该用双 for 循环填充它?

我查过其他关于卡片的帖子,但它们通常是 2D 或两个不同的数组,而不是 3D。谢谢你们的任何时间。如果我在编码/想法/帖子中偏离了方向,请告诉我,我是 Java 和堆栈的新手。

import java.util.Random;
import java.util.Arrays;
public class Deck {

    String Hearts, Diamonds, Spades, Clubs;
    private String Suit;
    private int Deck [][][];
    private int card [][];


    public void FreshDeck()
    {
        Deck = new int [][][]
                   {{{1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},{8,1},{9,1},{10,1},{11,1},{12,1}},       //Hearts 
                    {{1,2},{2,2},{3,2},{4,2},{5,2},{6,2},{7,2},{8,2},{9,2},{10,2},{11,2},{12,2}},       //Diamonds 
                    {{1,3},{2,3},{3,3},{4,3},{5,3},{6,3},{7,3},{8,3},{9,3},{10,3},{11,3},{12,3}},       //Spades
                    {{1,4},{2,4},{3,4},{4,4},{5,4},{6,4},{7,4},{8,4},{9,4},{10,4},{11,4},{12,4}}        //Clubs
                   };   
    }

    private void setValue(int index, int value)
        {
            card[index][0] = value;
        }
    private void setSuit(int index, int suit)
        {
            card[index][1] = suit;
        }
    public int Value(int index)
        {
        return card[index][0];
        }
    public int Suit(int index)
        {
        return card[index][1];
        }

    public void setRandomCard()
    {
    Random randomCard = new Random();
    int randomInt = randomCard.nextInt(51);
        for (int i=0; i<12; i++) 
        {
            for (int j=0; j<4; ++j)
            {
                card[i][j] = Deck[randomInt][i][j];
            }
        }       

    }
}

最佳答案

好的,所以根据你声明和初始化的方式Deck ,你有:

  • 表示套件的数组:索引从 0 到 3

  • 在其中,您有一个数组表示套件中的卡片:索引从 0 到 12,

  • 其中,每张卡片都表示为一个数组,其中 2 个元素分别表示套房号和套房内的卡片。

然后您尝试按如下方式选择一张随机卡片:

    card[i][j] = Deck[randomInt][i][j];

但是randomInt是一个介于 0 和 51 之间的数字。那是行不通的,是吗?和 card是一个二维整数数组...不是int[]的二维数组喜欢Deck .

这只是一团糟。


坦率地说,你最好重新开始。

我的建议:

  • 不要为此使用数组。 Java 是一种面向对象的语言,如果您按照 O-O 范式进行设计和编码,它的效果最好。

  • 声明一个 Card代表卡片的类。它有两个不可变字段;即套房和值(value)。

  • 使用其中一个标准列表类,并创建一个 List<Card>代表每副牌(或手牌)。

此外,使用标准的 Java 标识符约定。

关于java - 在 Java 中使用 3 维数组的卡片组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28260058/

相关文章:

java - Java 的 MD5 哈希问题

jQuery for 循环动态值

java - 如何使用for循环循环二维数组?

java - 具有任务队列问题的 Spring 安全性

javascript - 将用户名从 Java 发送到 iframe

java - SessionFactory.getCurrentSession() 与 EntityManager.createEntityManager()

r - [R] : applying a function to columns based on conditional row position

python - 尝试转换列表或删除列表数字周围的引号

tensorflow - 如何随机旋转张量图像

python - 打乱对象列表