我正在尝试在Java中制作" 2维"阵列,该数组以1到6之间的随机数量填充自身(编辑:我的意思:我的意思是0和5,就像代码当前一样 - 道歉)。但是,我希望这些数字在假想的最佳拟合中"镜像",好像在处理图形一样。例如,如果指示[1] [4]的数字为3.0,我希望[4] [1]的数字也为3.0。我目前拥有的代码片段在下面是值得的(我已经在代码的另一点上建立为6):
Random random = new Random();
int n = array.length;
double [][] populationArray = new double [n][n];
for (int i=0; i<populationArray.length; i++){
for (int j=0; j<populationArray[i].length; j++) {
populationArray[i][j] = random.nextInt(6);
if (populationArray[i][j] != 0) {
populationArray[j][i] = populationArray[i][j];
}
}
}
for (double[] p : populationArray) {
System.out.println(Arrays.toString(p));
}
目前印刷为:
[0.0, 1.0, 2.0, 1.0, 5.0, 2.0]
[1.0, 3.0, 5.0, 1.0, 3.0, 1.0]
[2.0, 5.0, 4.0, 1.0, 4.0, 1.0]
[1.0, 1.0, 1.0, 4.0, 2.0, 2.0]
[5.0, 3.0, 0.0, 2.0, 4.0, 4.0]
[2.0, 1.0, 0.0, 0.0, 4.0, 1.0]
您可以看到一些数字反映出,有些人不反映(我怀疑那些完全不运气的人),我正在为此逻辑挣扎。我将感谢任何建议 - 如果在其他地方解决了这一点,我也会链接,因为我自己找不到它。
谢谢。
因为if(populationArray[i][j] != 0)
仅镜像0的值。如果删除if statment,则代码将起作用。
也随机。nextint(6)将生成一个整数(包含)和6(独家),因此将生成0,1,2,3,4或5。
。因此,要生成数字1-5(包含),您必须进行随机进行。Nextint(5) 1
因此,for循环将成为:
for (int i=0; i<populationArray.length; i++){
for (int j=0; j<populationArray[i].length; j++) {
populationArray[i][j] = random.nextInt(5)+1;
populationArray[j][i] = populationArray[i][j];
}
}
但是,我想指出,所有位置均两次为随机值。为了创建一个6x6数组,差异不会很明显。但是,如果您打算创建更大的/许多数组,我建议您优化代码,以避免将数组中的每个位置给予两次值。
您可以通过将j<populationArray[i].length
更改为 j<=i
:
for (int i=0; i<populationArray.length; i++){
for (int j=0; j<=i; j++) {
populationArray[i][j] = random.nextInt(5)+1;
populationArray[j][i] = populationArray[i][j];
}
}
您的问题是这些行
populationArray[i][j] = random.nextInt(6);
if(populationArray[i][j] != 0) {
populationArray[j][i] = populationArray[i][j];
}
如果 populationArray[i][j] = random.nextInt(6);
返回0,则不会反映0。我怀疑您想要populationArray[i][j] = random.nextInt(5)+1;
这将返回1到6之间的随机数。
奖励:您的代码现在可以正常工作,但实际上正在编写每个单元格两次。它将写入[1,4],然后镜像[4,1],但随后它将继续循环并写入[4,1],然后镜像[1,4]来解决此问题,您需要添加一张支票以查看如果是在写信之前为0。巧合的是,最终将您的if语句移动一行。
for (int i=0; i<populationArray.length; i++){
for (int j=i; j<populationArray[i].length; j++) {
populationArray[i][j] = random.nextInt(5)+1;
populationArray[j][i] = populationArray[i][j];
}
}
编辑:根据卢克的评论更改解决方案。请注意第二个更改对语句的int j=i
。
如果您的数组变得更大,则可能需要通过两次设置每个元素来节省时间。因此,直到populationArray[i].length
for (int i=0; i<populationArray.length; i++){
for (int j=0; j<populationArray[i].length-i; j++) {
populationArray[i][j] = random.nextInt(6);
int oppositI = populationArray.length -1 - i;
int oppositJ = populationArray[i].length -1 - j;
populationArray[oppositI][oppositJ] = populationArray[i][j];
}
}
这假设您的populationArray
是一个SQARE。否则会更复杂...