【发布时间】:2020-05-06 01:36:10
【问题描述】:
在下面的代码中,我尝试制作一个数组混洗器。这将按照runTimes 的指示多次对字符数组(charArray)进行洗牌,将这些数组中的每一个存储在二维数组shuffledArrays 中。问题是当程序完成 for 循环时,由于某种原因,它会将所有数组设置为最后添加的数组。
感谢您的帮助。
import java.util.Random;
public class Testing {
public static void main(String[] args) {
char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f'}; //Array to be shuffled
int runTimes = 3; //Amount of shuffled arrays to create
char[][] shuffledArrays = new char[runTimes][charArray.length];;
for (int x = 0; x != runTimes; x++) {
shuffledArrays[x] = shuffleArray(charArray);
System.out.print("IN FOR LOOP: shuffledArrays[" + x + "] = ");
System.out.println(shuffledArrays[x]);
}
System.out.print("OUT OF FOR LOOP: shuffledArrays[0] = ");
System.out.println(shuffledArrays[0]);
System.out.print("OUT OF FOR LOOP: shuffledArrays[1] = ");
System.out.println(shuffledArrays[1]);
System.out.print("OUT OF FOR LOOP: shuffledArrays[2] = ");
System.out.println(shuffledArrays[2]);
}
private static char[] shuffleArray(char[] array) {
Random rand = new Random();
for (int x = 0; x < array.length; x++) {
int randomIndexToSwap = rand.nextInt(array.length);
char temp = array[randomIndexToSwap];
array[randomIndexToSwap] = array[x];
array[x] = temp;
}
return array;
}
}
【问题讨论】:
-
您的
shuffledArray没有返回新数组。它返回传入的相同数组。并且您始终传入相同的数组。因此,您将相同的char[]数组添加到shuffledArrays很多次。 -
它确实返回了相同的数组,但它在
shuffleArray()内部发生了变化。这就是为什么"IN FOR LOOP: "行会打印出三个不同的数组,都是原始版本的改组版本。我不明白的是为什么当它离开for循环时,它刚刚打印出来的所有数组现在都变成了相同的值。 -
因为你一遍又一遍地改组同一个数组。但最后你仍然只有一个数组。
-
考虑使用 Collections.shuffle:docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/…
标签: java arrays for-loop shuffle