1
자바에 관한 책을 읽었으며 "배열"아래에이 예제가 주어졌습니다. 자바의 배열 이해
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이 = 내가 + (INT) (인 Math.random() * (N-I를));"이유를 알고 싶은 덱을 셔플하는 데 사용? 이 라인으로 수행되며,이 라인이 명시 적으로 사용 된 이유는 무엇인지 설명하세요. (논리를이 사용 된 이유에)
[피셔 - 예이츠 셔플] (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) 알고리즘입니다. – Jesper
'int r = i + (int) (Math.random() * (Ni))'는 i와 N 사이의 난수를 생성합니다. –
카드의 배열 순서를 재정렬하는 데 사용됩니다. 무작위 방식으로. javadoc에서 Math.random을 검색 할 수 있습니다. – laune