Java 请帮我理解这段代码

Java 请帮我理解这段代码,java,Java,我为学校做了一个java项目。这是一段代码,我很难理解它的逻辑。请解释一下 for(int i = 0; i< leftbut.length; i++){ int randomNumber =(int)(Math.random()*leftbut.length); tempNum = leftbut[randomNumber]; leftbut[randomNumber] = leftbut[i];

我为学校做了一个java项目。这是一段代码,我很难理解它的逻辑。请解释一下

for(int i = 0; i< leftbut.length; i++){
          int randomNumber =(int)(Math.random()*leftbut.length);
             tempNum = leftbut[randomNumber];
            leftbut[randomNumber] = leftbut[i];
            leftbut[i]=tempNum;      

     }
for(int i=0;i
leftbut在本例中实际上是由9个按钮组成的数组。 这段代码应该在不同的位置移动9个按钮。
我就是不明白这段代码是怎么工作的。

这段代码会随机生成原始数组。

然而,请注意,这是有偏见的-它不会产生均匀分布的所有排列。讨论这种偏见的影响

为了克服这个问题,您可能想看看(主要区别是,在每次迭代中生成一个范围为[i,n]的随机数,而不是范围为[0,n])


编辑:
如果将赋值封装在一个方法中,您可能会更好地理解它:

private static void swap(int[] array, int i, int j) { 
       tempNum = array[j];
       array[j] = array[i];
       array[i]=tempNum; 
}
现在,代码将更易于遵循:

for(int i = 0; i< leftbut.length; i++) {
          //choose a random index in the array
          int randomNumber =(int)(Math.random()*leftbut.length);
          //swap the element in index i with the random element chosen in the array
          swap(leftbut, i, randomNumber);
}
for(int i=0;i
其思想是使用随机索引对数组中的每个元素进行
swap()
交换。此随机索引从数组中随机选择,其索引表示为
randomNumber


由于您仅交换周围的项,因此可以很容易地证明输出数组是原始数组的排列。

代码生成原始数组的随机值。

但是,请注意,这是有偏差的-它不会在均匀分布中生成所有排列。讨论此偏差的影响

为了克服这个问题,您可能想看看(主要区别是,在每次迭代中生成一个范围为[i,n]的随机数,而不是范围为[0,n])


编辑:
如果将赋值封装在一个方法中,您可能会更好地理解它:

private static void swap(int[] array, int i, int j) { 
       tempNum = array[j];
       array[j] = array[i];
       array[i]=tempNum; 
}
现在,代码将更易于遵循:

for(int i = 0; i< leftbut.length; i++) {
          //choose a random index in the array
          int randomNumber =(int)(Math.random()*leftbut.length);
          //swap the element in index i with the random element chosen in the array
          swap(leftbut, i, randomNumber);
}
for(int i=0;i
其思想是使用随机索引对数组中的每个元素进行
swap()
交换。此随机索引从数组中随机选择,其索引表示为
randomNumber


由于您仅交换周围的项,因此可以很容易地证明输出数组是原始数组的置换。

它仅9次随机交换到leftbut数组的元素。

它仅9次随机交换到leftbut数组的元素

for(int i = 0; i< leftbut.length; i++){
声明整数变量randomNumber,并在0-数组长度范围内分配一个随机值

 tempNum = leftbut[randomNumber];         
 leftbut[randomNumber] = leftbut[i];
 leftbut[i]=tempNum;  
这实际上颠倒了数组中2个按钮的位置,值i变成随机值,反之亦然

声明整数变量randomNumber,并在0-数组长度范围内分配一个随机值

 tempNum = leftbut[randomNumber];         
 leftbut[randomNumber] = leftbut[i];
 leftbut[i]=tempNum;  

这实际上颠倒了数组中的两个按钮的位置,我的值变成了随机值,反之亦然。你想让我们为你做作业吗?答案有用吗?我不是要求你做。因为这是一个团队项目,我的合作伙伴做了这部分编码。我只是想让这有意义。谢谢。你想让我们为你做作业吗还是你?答案有用吗?我不是要求你这么做。因为这是一个团队项目,我的合作伙伴做了这部分编码。我只是想让这有意义。谢谢。所有9个按钮都包含一个ImageIcon。如果此代码随机生成数字,使JButton乱序。将有重复的按钮,带有重复的ImageIcon否?所有9个按钮都是按钮包含一个ImageIcon。如果此代码随机生成的数字会使JButton乱序。将有具有重复ImageIcon编号的重复按钮?所有9个按钮都包含一个ImageIcon。如果此代码随机生成的数字会使JButton乱序。将有具有重复ImageIcon编号的重复按钮?@user2016977 A permutation不包含双精度,因此,如果原始列表中的元素都是唯一的,那么结果列表中的所有元素也都是唯一的。有什么简单的方法可以解释这个问题?谢谢你,阿米特。我正在努力理解它。谢谢你的帮助,所有9个按钮都包含一个图像图标。如果此代码随机生成数字,从而使JButton乱序。将有带有重复图像图标no?@user2016977的重复按钮排列不包含双精度,因此如果原始列表中的元素都是唯一的,则结果列表中的所有元素也将是唯一的。有什么简单的方法可以解释这一点?谢谢你,阿米特。我正在努力理解它。谢谢你的帮助