java - For循环覆盖数组一旦完成
问题描述
在下面的代码中,我尝试制作一个数组洗牌器。这将charArray
根据指示多次对字符数组 ( ) 进行洗牌runTimes
,将这些数组中的每一个存储在二维数组中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;
}
}
解决方案
由于您总是返回SAME数组,因此最后一个数组会影响所有数组。您需要返回副本或传递副本,例如:
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 Arrays.copyOf(array, array.length);
}
推荐阅读
- javascript - 根据常数显示单选按钮
- python - 在 Flask 应用程序中绑定 LDAP 连接时出现 LDAPInvalidDNSyntaxResult 错误
- c# - 列表框中的素数应该出现在文本框中
- python - 通过 pytest 使用多进程处理时如何测量覆盖率?
- c# - MemoryStream 中的媒体未显示(或未播放)
- phaser-framework - 如何在Phaser 3中获取鼠标点与特定对象之间的距离
- python - MQTT & Postgresql DB:使用 python 将 mqtt 消息插入到 postgresql 表的列中
- django - Django Rest Framework:按用户名序列化用户多对多字段
- linux - 我怎样才能看到像这张照片一样的我的电脑规格?
- string - 从字符串中删除字符序列