public class traverseDemo2 {
public static void main(String[] args) {
int[] gh ={22,33,35,13,88};
Random r = new Random();
for (int j = 0; j < gh.length; j++) {
int i = r.nextInt(gh.length);
int newgh = gh[i];
gh[i]=gh[j];
gh[j]=newgh;
System.out.println(gh[j]);
}
35
88
22
22
13
public class traverseDemo2 {
public static void main(String[] args) {
int[] gh ={22,33,35,13,88};
Random r = new Random();
for (int j = 0; j < gh.length; j++) {
int i = r.nextInt(gh.length);
int newgh = gh[i];
gh[i]=gh[j];
gh[j]=newgh;
}
for (int i = 0; i < gh.length; i++) {
System.out.println(gh[i]+"\t");
}
}
}
运行结果为
35
13
33
88
22
举个简单的例子初始顺序{22,33,35,13,88}
你第一轮循环,把22和35调换了位置{35,33,22,13,88},那么输出是35
你第二轮循环,把33和35调换了位置{33,35,22,13,88},那么输出还是35,这就是重复的原因
如果你在最后遍历输出,那么此时顺序已经确定,那肯定就不会重复了
在循环内输出的时候,元素的位置是不固定的,随着交换的进行,位置还会变化,因此出现相同的输出是正常的。
循环外输出,元素位置都已经固定了。
下面给出一个方法,可以观察交换过程中元素位置。
有用的话,就采纳吧, 加油,同学。
public class traverseDemo2 {
private static void printArray(int[] arr){
for (int value : arr) {
System.out.print(value + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] gh ={22,33,35,13,88};
Random r = new Random();
for (int j = 0; j < gh.length; j++) {
int i = r.nextInt(gh.length);
int newgh = gh[i];
gh[i]=gh[j];
gh[j]=newgh;
System.out.println(String.format("index[%d]<-->[%d] ,gh[%d] = %d ", i,j,j, gh[j]));
printArray(gh);
}
}
}
初一的时候,是初一大扫除,第二年初二大扫除以此类推
放在后面输出,没有重复,麻烦采纳一下,谢谢
public static void main(String[] args) throws InterruptedException {
int[] gh ={22,33,35,13,88};
Random r = new Random();
for (int j = 0; j < gh.length; j++) {
int i = r.nextInt(gh.length);
int newgh = gh[i];
gh[i]=gh[j];
gh[j]=newgh;
// System.out.println(gh[j]);
}
System.out.println(Arrays.toString(gh));
}