2016-03-23 3 views
0

Эй, ребята, я просто читал свои заметки и с трудом понимал алгоритм, который они использовали для перетасовки карт. Вот как это выглядит. Может кто-нибудь, пожалуйста, объясните каждую строку так подробно, как они могут? Большое спасибо.Алгоритм перетасовки колоды в Java

public void shuffle() 
{ 
    // next call to method dealCard should start at deck[0] again 
    currentCard = 0; 

    // for each Card, pick another random card (0-51) and swap them 
    for (int first = 0; first < deck.length; first++) 
    { 
     // select a random number between 0 and 51 
     int second = randomNumbers.nextInt(NUMBER_OF_CARDS); 

     // swap current Card with randomly selected Card 
     Card temp = deck[first]; 
     deck[first] = deck[second]; 
     deck[second] = temp; 
    } 
} 
+0

Пожалуйста, разместите код вместо использования изображений. – apicellaj

+0

Это просто базовый обмен значениями – Ramanlfc

+0

Замечания в коде объясняют, что каждая строка делает хорошо. Пройдя через каждую карточку в колоде, она меняет карту на другую с помощью случайного числа. –

ответ

0

алгоритм делает следующее,

In a loop it traverses all 52 cards. 
For each card picked, it randomly chooses one among the remaining 51. 
It swaps the two. 
-1

Click on this github link for the solution

Используйте reservoirSampleShuffle, нет необходимости в дополнительных структуры данных здесь и его в месте перетасовать

+0

Я полагаю, что этот код уже предоставлен ему –

+1

Вопрос был * «Может кто-нибудь объяснить каждую строку» *. Это вообще не отвечает на вопрос. – Pang

3

для цикла

for (int first = 0; first < deck.length; first++) 

прокладывает все карты в колоде. Это в основном говорит

Для каждой из карт в колоде ... делать некоторые вещи

И «некоторые вещи» код, который находится внутри для цикла:

// select a random number between 0 and 51 
    int second = randomNumbers.nextInt(NUMBER_OF_CARDS); 

    // swap current Card with randomly selected Card 
    Card temp = deck[first]; 
    deck[first] = deck[second]; 
    deck[second] = temp; 

Это первый выбирает случайное число от 0 до 51.

int second = randomNumbers.nextInt(NUMBER_OF_CARDS); 

«Почему вы хотите сделать это?» Ты спрашивал. «Перетасовка» колода просто поменяв расположение карт в колоде, как

5 алмазов идет на вершину, 3 клубов идет куда-то в середине, король пик идет на 23-м месте. ..

Так что для каждой карты программа «свопирует» ее с картой в случайном месте в колоде. Вот почему он выбирает случайное число от 0 до 51.

Допустим, что случайное число 25. Затем поменять первую карту с одним с индексом 25 массива палубного:

Card temp = deck[first]; 
deck[first] = deck[second]; 
deck[second] = temp; 

Если вы не понимаете, как работает подкачка. Я могу объяснить.

В Java, вы не можете просто поменять вещи, помещая материал в переменной B в переменной А и материал в A в B:

// This code doesn't swap a and b 
int a = 10; 
int b = 20; 
a = b; 
b = a; 

Вы должны сначала поместить вещи в где-нибудь,

Card temp = deck[first]; 

Затем переместите вещи в в к А,

deck[first] = deck[second]; 

Наконец, подобрать материал, который был в A из этого «где-то» и положить его в B:

deck[second] = temp; 

Фу! Это было много шагов!

Смежные вопросы