我正在研究Murach的Java编程教科书练习11-4,并且我已经有前两种方法可以正常工作;但是我的洗牌方法根本不起作用。没有任何事情发生。
public static String[] suits = {"C", "S", "H", "D"};
public static int[][] cards = new int[4][13];
public static int used[] = new int[13];
public static void loadCards() {
for(int i = 0; i < cards.length; i++) {
for(int j = 0; j < cards[i].length; j++){
cards[i][j] = j+1;
}
}
}
public static void writeCards() {
for(int i = 0; i < cards.length; i++) {
System.out.print(suits[i] +" ");
for (int j = 0; j < cards[i].length; j++) {
System.out.print(cards[i][j]+ " ");
}
System.out.println("");
}
}
public static void shuffle() {
for (int i = 0; i < cards.length; i++) {
shuffle:
for (int j = 0; j < cards[i].length; j++) {
double d = Math.random() * 13;
int random = (int) d;
for(int test = 0; test<used.length;test++){
if(random == used[test]) {
break shuffle;
}
}
cards[i][j] = random;
}
}
}
public static void main(String[] args) {
loadCards();
writeCards();
System.out.println("");
shuffle();
writeCards();
}
我觉得我开始用shuffle()方法挖掘自己的错误。是否有一个简单的解决方法我没有看到/我在尝试一些绝对错误的东西?
答案 0 :(得分:0)
无法为您编写随机播放代码,但您可以使用类似bogo sort之类的内容来随机播放。该算法用于加扰或改组,并用于教育目的,以说明为什么排序算法的效率如此重要。
答案 1 :(得分:0)
解决了这个问题,感谢Fred Larson将我指向了正确的方向。
public static void shuffle() {
for (int i = 0; i < cards.length; i++) {
for (int j = cards[i].length - 1; j > 0; j--) {
double d = Math.random() * 13;
int random = (int) d;
int a = cards[i][random];
cards[i][random] = cards[i][j];
cards[i][j] = a;
}
}
}