使用顺序 for 循环的数组洗牌方法
Array shuffle method using sequential for-loops
我正在尝试为纸牌游戏程序编写 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;
}
错误在哪里?
您没有使用 shuffled 数组的元素重新填充原始数组 values。
values = shuffled;
不会复制 shuffled 并为其赋值。假设值数组是一个全局变量,
您应该手动执行此操作:
for(int i =0;i<shuffled.length();i++)
values[i] = shuffled[i];
因为Java passes everything by value,你需要returnshuffled
并将values
分配给错误命名方法return的值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);
// ...
}
我正在尝试为纸牌游戏程序编写 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;
}
错误在哪里?
您没有使用 shuffled 数组的元素重新填充原始数组 values。
values = shuffled;
不会复制 shuffled 并为其赋值。假设值数组是一个全局变量,
您应该手动执行此操作:
for(int i =0;i<shuffled.length();i++)
values[i] = shuffled[i];
因为Java passes everything by value,你需要returnshuffled
并将values
分配给错误命名方法return的值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);
// ...
}