解释代码

pur*_*rme 0 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();

    }
}
Run Code Online (Sandbox Code Playgroud)

对我没用的代码

deck[SUITS * i + j] = rank[i] + " of " + suit[j]
Run Code Online (Sandbox Code Playgroud)

我没有说的是,为什么他们乘以SUITS乘以我然后加上j.令人困惑的是SUITS(等于4),乘以i(13),然后加上j(其值为4),根本不等于52.所以请解释一下,这个函数是如何工作的.

Kon*_*Kon 5

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