首页 > 解决方案 > Java:使用 math.random() 洗牌

问题描述

我有一个基于生成甲板然后洗牌的代码。这是我目前的代码。

import java.lang.Math;
import java.util.Arrays;


public class Program_9 {
    public static void main(String[] args) {            
        int[] deck = new int[36];
        int n = 1;
        
    initDeck(deck);
    
    System.out.println("\nDeck");
    System.out.println("#############\n");
    
    displayDeck(deck);
    
    System.out.println("\nShuffled Deck");
    System.out.println("#############\n");
    
    shuffleDeck(deck, 10);
    
    
    
}

public static int cardValue(int card) {
    //Return the integers value 1 - 9 of card
    
    int cardValue = card % 9 + 1;
    
    return cardValue;
}

public static String cardSuit(int card) {
    //return the suit club, spade, heart, diamond of card   
    
    String cardSuit = "";
    int value = card / 9;
    
    if (value == 0) {
        cardSuit = "Club";
    }
    
    if (value == 1) {
        cardSuit = "Spade";
    }
    
    if (value == 2) {
        cardSuit = "Heart";
    }
    
    if (value == 3) {
        cardSuit = "Diamond";
    }
    
    return cardSuit;        
}

public static void displayCard(int card) {
    //prints card value and suit in some reasonable report
    System.out.print(cardValue(card) + " of " + cardSuit(card));
    
}

public static void initDeck(int[] deck) {
    //assign the elements of deck, such that each elements value is the same as it index
    
    deck[0] = 1;
    deck[1] = 2;
    deck[2] = 3;
    deck[3] = 4;    
    deck[4] = 5;
    deck[5] = 6;
    deck[6] = 7;
    deck[7] = 8;
    deck[8] = 9;
    deck[9] = 10;
    deck[10] = 11;
    deck[11] = 12;
    deck[12] = 13;
    deck[13] = 14;
    deck[14] = 15;
    deck[15] = 16;
    deck[16] = 17;
    deck[17] = 18;
    deck[18] = 19;
    deck[19] = 20;
    deck[20] = 21;
    deck[21] = 22;
    deck[22] = 23;
    deck[23] = 24;
    deck[24] = 25;
    deck[25] = 26;
    deck[26] = 27;
    deck[27] = 28;
    deck[28] = 29;
    deck[29] = 30;
    deck[30] = 31;
    deck[31] = 32;
    deck[32] = 33;
    deck[33] = 34;
    deck[34] = 35;
    deck[35] = 36;

}



public static void shuffleDeck(int[] deck, int n) {
    //the following performed exactly n times:
    // 1. generate two random numbers j and k - each in range of [0 , 35]
    // 2. swap the values of the deck array at indices j and k
    
    for (int i = 0; i < deck.length; i++) {
        
        int k = (int)((Math.random() * 35) + 0);
        int j = (int)((Math.random() * 35) + 0);
        
        
        
    }
}

public static void displayDeck(int[] deck) {
    //prints the cards in deck in some reasonable report format
    
    for (int i = 0; i < deck.length; ++i) {
        int card = i;
        
        displayCard(card);
        System.out.println();
        
    }
    
    
}

}

我在理解如何编写 shuffleDeck() 方法时遇到问题。这是我第一次学习 Java,所以我还很新。我不明白的是 shuffleDeck() 方法中的第二个推荐。 请注意,这是一项家庭作业,因此我希望提供提示而不是答案

标签: javaarraysfor-loop

解决方案


这是我周围的一些代码,它们就是这样做的。

    char[] someArray= ...;
    
    //shuffle it up
    for (int i = 0; i < someArray.length; i++) {
        int randomPosition = rand.nextInt(someArray.length);
        char temp = someArray[i];
        someArray[i] = someArray[randomPosition];
        someArray[randomPosition] = temp;
    } 

我基本上遍历数组中的所有位置并与数组中的随机位置进行交换。


推荐阅读