[英]How to shuffling the 2D array in java correctly?
我想在Java中将2D数组改组,该数组的数据:
2.5 2.6
2.0 3.0
3.0 3.0
这是我的随机播放方法:
public void shuffleData(){
Random rnd = new Random();
double temp[][] = new double[this.NBaris][NKolom];
this.dataShuffle = new double[this.NBaris][NKolom];;
for(int i = this.NBaris-1; i >= 0; i--){
int index = rnd.nextInt(i + 1);
for(int j = 0; j < this.NKolom; j++){
temp[0][j] = this.data[index][j];
this.dataShuffle[index][j] = this.dataShuffle[i][j];
this.dataShuffle[i][j] = temp[0][j];
}
}
}
但是结果是当我打印时变成这样:
2.5 2.6
2.5 2.6
2.0 3.0
我的方法有什么问题?,您能帮我吗? 谢谢。
有不同的问题
this.data[index][j]
获取一个随机值(可能是同一值的几倍),并将其存储在数组dataShuffle中。 您会发现,这导致了意外的重复行。 如果您只想调整行的顺序并将值始终保留在同一列中,则可以这样。
double[][] data = {{1.1, 1.2}, {2.1, 2.2}, {3.1, 3.2}};
List<double[]> asList = Arrays.asList(data);
Collections.shuffle(asList);
data = asList.toArray(new double[0][0]);
System.out.println("toArray = " + Arrays.deepToString(data));
样本输出
toArray = [[1.1, 1.2], [3.1, 3.2], [2.1, 2.2]]
如果您不想只混排行,也不想混排列之间的值,则可以使用此代码段
double[][] data = {{1.1, 1.2}, {2.1, 2.2}, {3.1, 3.2}};
Random random = new Random();
int numberOfValues = data.length * data[0].length;
for (int i = numberOfValues - 1; i > 0; i--) {
int index = random.nextInt(i);
int row = i / data[0].length;
int column = i - row * data[0].length;
int randomRow = index / data[0].length;
int randomColumn = index - randomRow * data[0].length;
double temp = data[row][column];
data[row][column] = data[randomRow][randomColumn];
data[randomRow][randomColumn] = temp;
}
System.out.println("toArray = " + Arrays.deepToString(data));
样本输出
toArray = [[2.1, 3.2], [2.2, 1.2], [1.1, 3.1]]
这个想法是将所有条目视为一个平面数组[2.1, 3.2, 2.2, 1.2, 1.1, 3.1]
并从最后一个索引开始回到第二个索引。
0 <= index < 5
并交换data [index]和data [5]上的值 0 <= index < 4
并交换data [index]和data [4]上的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.