【发布时间】:2019-12-20 02:18:28
【问题描述】:
我正在尝试为纸牌游戏程序编写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;
}
错误在哪里?
【问题讨论】:
-
一些答案已经显示了如何解决这个问题。请查看此问题以了解您的方法为何不起作用:Is Java "pass-by-reference" or "pass-by-value"?