java - 解释一下代码

标签 java arrays poker

这是代码:

基本上,此代码打印出 52 张牌,其中包含花色 + 等级。

package javaapplication52;

public class JavaApplication52 {

    public static void deck() {

        String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" };
        String[] rank = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack",
                "Queen", "King", "Ace" };

        // avoid hardwired constants
        int SUITS = suit.length;
        int RANKS = rank.length;
        int N = SUITS * RANKS;
        // initialize deck
        String[] deck = new String[N];
        for (int i = 0; i < RANKS; i++) {
            for (int j = 0; j < SUITS; j++) {
                deck[SUITS * i + j] = rank[i] + " of " + suit[j];

            }
        }
        // shuffle
        for (int i = 0; i < N; i++) {
            int r = i + (int) (Math.random() * (N - i));
            String t = deck[r];
            deck[r] = deck[i];
            deck[i] = t;
        }

        // print shuffled deck
        for (int i = 0; i < N; i++) {
            System.out.println(deck[i]);

        }

    }

    public static void main(String[] arg) {

        JavaApplication52 d = new JavaApplication52();

        d.deck();

    }
}

对我来说毫无意义的代码

deck[SUITS * i + j] = rank[i] + " of " + suit[j]

我不明白的是,为什么他们乘以 SUITS 乘以我然后添加 j。令人困惑的是 SUITS(等于 4),乘以 i(等于 13),然后加上 j(其值为 4),根本不等于 52。 所以请解释一下这个功能是如何工作的。

最佳答案

你的 i 变量只会在 0 到 12 之间,j 变量会在 0 到 3 之间,所以索引的最大值是 4 * 12 + 3 = 51,这是你的牌组的最大索引。这样的一副牌有 52 个元素,对于一副牌来说是有意义的。

关于java - 解释一下代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17647098/

相关文章:

java - 无法使用java小程序读取文本文件

arrays - C程序语法

arrays - 需要直接在 PostgreSQL 数据库中插入结构

c - 二维和一维数组中指针的区别

java - Spring Boot使用pathvariable从url获取id

java - 如何将 apache avro GenericRecord 用于动态数据?

ruby - 打印出从列表的 Y 元素中选择的 X 个不同对象的所有组合

java - Java 中的扑克之手

c - C语言的扑克牌游戏。请解释花色[4][9]和花色[13][6]?

java - 我正在尝试使用 Datastax 4.2.2 编写一个 DAO 接口(interface),但是遇到了几个编译错误