使用顺序for循环的数组改组方法

问题描述 投票:0回答:2

我正在尝试为纸牌游戏程序编写shuffle方法。该方法的工作原理是将牌组分成两半,然后将纸牌与其他两半交错。问题是,该方法只是将数组保持原样。什么都没有被洗牌。

/**
     * Apply a "perfect shuffle" to the argument.
     * The perfect shuffle algorithm splits the deck in half, then interleaves
     * the cards in one half with the cards in the other.
     * @param values is an array of integers simulating cards to be shuffled.
     */
    public static void perfectShuffle(int[] values) {
        int[] shuffled = new int[values.length];
        int k = 0;
        for (int j = 0; j < (values.length + 1) / 2; j++){
           shuffled[k] = values[j];
           k += 2;
        }
        k = 1;
        for (int j = (values.length + 1) / 2; j < values.length; j++){
            shuffled[k] = values[j];
            k += 2;
        }
        values = shuffled;
    }

错误在哪里?

java arrays shuffle
2个回答
0
投票

您未使用数组shuffled的元素重新填充原始数组values

values = shuffled;不会复制并重新分配值。假设values数组是一个全局变量,您应该手动执行此操作:

for(int i =0;i<shuffled.length();i++) values[i] = shuffled[i];


0
投票

由于Java passes everything by value,您需要返回shuffled并将values分配给名称错误的方法perfectShuffle()的返回值:

public static int[] perfectShuffle(int[] values) {
    int[] shuffled = new int[values.length];
    int k = 0;
    for (int j = 0; j < (values.length + 1) / 2; j++) {
        shuffled[k] = values[j];
        k += 2;
    }
    k = 1;
    for (int j = (values.length + 1) / 2; j < values.length; j++) {
        shuffled[k] = values[j];
        k += 2;
    }
    return shuffled;
}

public static void main(String[] args) {
    int[] values = { 1, 2, 3, 4, 5 };
    int[] shuffled = perfectShuffle(values);
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.