无法让2D数组进行随机播放

时间:2016-07-20 20:11:17

标签: java arrays shuffle

我正在研究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()方法挖掘自己的错误。是否有一个简单的解决方法我没有看到/我在尝试一些绝对错误的东西?

2 个答案:

答案 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;
        }
    }
}