JAVA使用随机数交换数组元素后出现重复值

问题遇到的现象和发生背景 在循环中随机交换完数组元素后接着在循环内部输出,会经常出现重复值,而在这个循环外部输出数组元素则不会出现重复值是什么原因呢
问题相关代码,请勿粘贴截图

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));
    }

img


输出

img