1
我正在閱讀一本關於java的書,並且在「Arrays」下給出了這個例子。瞭解java中的數組
public class Deck {
public static void main(String[] args) {
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];
}
}
// shuffles our deck of cards
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]);
}
}
}
我想知道爲什麼 「INT R = I +(INT)(的Math.random()*(N-1));」 來洗牌?請解釋什麼是這一行做,也就是爲什麼在明確使用這一行。(邏輯,爲什麼這被使用)
這是[Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)算法。 – Jesper
'int r = i +(int)(Math.random()*(Ni))'生成i到N之間的隨機數 –
它用於重新排列卡片(數組卡片的數組元素)隨機的方式。你可以在javadoc中查找Math.random。 – laune