java - 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() 方法中的第二个推荐。 请注意,这是一项家庭作业,因此我希望提供提示而不是答案
解决方案
这是我周围的一些代码,它们就是这样做的。
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;
}
我基本上遍历数组中的所有位置并与数组中的随机位置进行交换。
推荐阅读
- java - 应用程序无法加载 applicationContent.xml。为什么?
- powershell - 如何根据条件按名称对 SQL DataRow 结果进行分组
- python-3.x - 给定一个包含 N 个整数的数组 A。你的任务是找出奇数在数组中重复的最大次数
- vba - 如何分离字形
- powerbi - 如何在 Power BI 中实时跟踪移动项目?
- java - 将 jdbcTemplate.batchUpdate 重写为 NamedParameterJdbcTemplate.batchUpdate
- scala - 将 Array[Int] 转换为 Map[Int, Int] 的 Scala 函数式风格
- reactjs - 为什么状态更新但我无法通过 React 中的钩子访问它?
- yacc - 使用 yacc 输出布尔表达式
- javascript - 如何防止多次点击提交按钮