请帮忙错误原因并改错。

代码实现目标:
1-33个数放到doubleball.arrred数组中,目的是随机33个数,且不重复地放进去。
代码如下:
import java.util.Arrays;
import java.util.Random;

public class DoubleBall {
int[] arrred = new int[33]; // 红色球
int[] arrblue = new int[16];// 蓝色球
double bonuse; // 奖金

public static void main(String[] args) {
    DoubleBall doubleball = new DoubleBall(); // 实例化一个双色球
    for (int i = 0; i < doubleball.arrred.length; i++) // 红色双色球未初始化遍历
    {
        int RandomNumber = new Random().nextInt(33)+1 ;
        doubleball.arrred[i] = RandomNumber;

        for (int k = 0; k < doubleball.arrred.length ; k++) { //
            for (int j = 0; j < i; j++) { // 只要一发现有相同的就随机变一次
                while(doubleball.arrred[j] == doubleball.arrred[i]) {

                    RandomNumber = new Random().nextInt(33)+1  ;
                    doubleball.arrred[i] = RandomNumber;

                }

            }
        }

// System.out.print(doubleball.arrred[i] + " ");
}
//Arrays.sort(doubleball.arrred);
for (int j : doubleball.arrred) {
System.out.print(j + " ");
}

    for (int i = 0; i < doubleball.arrred.length; i++) {
        for (int j = i + 1; j < doubleball.arrred.length ; j++) {
            if (doubleball.arrred[i] == doubleball.arrred[j]) {
                System.out.println("失败了。");
            }
        }
    }
}
}

https://blog.csdn.net/weixin_42345008/article/details/80617724

我想要改错,不用其他正确答案。
如果我的方法实在是没救,改不了,请帮我分析一下详细原因。

for (int k = 0; k < doubleball.arrred.length ; k++) { //
for (int j = 0; j < i; j++) { // 只要一发现有相同的就随机变一次
while(doubleball.arrred[j] == doubleball.arrred[i]) {

                RandomNumber = new Random().nextInt(33)+1  ;
                doubleball.arrred[i] = RandomNumber;

            }

        }
    }

这里写错了

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
8.【编码】福彩双色球中红球由6个1-33之间的数字组合,且不重复,
编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字 *
*/
public class ColorBall {
public static void main(String[] args) {
Set set=new HashSet<>();
//随机数
Random random=new Random();
while(set.size()<6) {
int numbers=random.nextInt(33)+1;
set.add(numbers);
}
System.out.println(set);
}

 import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
8.【编码】福彩双色球中红球由6个1-33之间的数字组合,且不重复,
编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字 *
 */
public class ColorBall {
    public static void main(String[] args) {
        Set<Integer> set=new HashSet<>();
        //随机数
        Random random=new Random();
        while(set.size()<6) {
            int numbers=random.nextInt(33)+1;
            set.add(numbers);
        }
        System.out.println(set);
    }

                 RandomNumber = new Random().nextInt(33)+1  ;
                doubleball.arrred[i] = RandomNumber;
                                public class ColorBall {
    public static void main(String[] args) {
        Set<Integer> set=new HashSet<>();
        //随机数
        Random random=new Random();
        while(set.size()<6) {
            int numbers=random.nextInt(33)+1;
            set.add(numbers);
        }
        System.out.println(set);
    }

程序逻辑有问题,阅读性也不好,稍稍修改下,你看下:
package test;

import java.util.Arrays;
import java.util.Random;

public class RandomTest {
private int[] arr;

private Random ran = new Random();

private int len;

public RandomTest(int len) {
    this.len = len;
    arr = new int[len];
}

private boolean exists(int v, int endIdx) {
    if (endIdx == 0) {
        return false;
    }
    for(int i = 0; i <=endIdx; i++) {
        if (arr[i] == v) {
            return true;
        }
    }
    return false;
}
public void print() {
    System.out.println(Arrays.toString(arr));
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
}

public void randFill() {
    for (int i = 0; i < len; i++) {
        int ranNum = ran.nextInt(len) + 1;
        while (exists(ranNum, i)) {
            ranNum = ran.nextInt(len) + 1;
        }
        arr[i] = ranNum;
    }
}
public static void main(String[] args) {
    RandomTest test = new RandomTest(33);
    test.randFill();
    test.print();
}

}

存在逻辑错误,建议看下我贴的代码,可以直接运行。
看看你的代码的问题:
for (int k = 0; k < doubleball.arrred.length ; k++) { //loop1

        for (int j = 0; j < i; j++) {//loop2
            while(doubleball.arrred[j] == doubleball.arrred[i]) {//此时loop3
                                //假设当前数组元素时【0,1,2,3,3】,i等于4 ,j等于3
                                //按照while循环会重新生成一个值比如是0,此时数组值为【0,1,2,3,0】,j下标等于4
                                //此时loop4和loop3都退出,假设此时loop的k已经是最后一个元素下标,也退出了,那生成的值就有问题
                RandomNumber = new Random().nextInt(33)+1  ;
                doubleball.arrred[i] = RandomNumber;

            }

        }
    }

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
8.【编码】福彩双色球中红球由6个1-33之间的数字组合,且不重复,
编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字 *
*/
public class ColorBall {
public static void main(String[] args) {
Set set=new HashSet<>();
//随机数
Random random=new Random();
while(set.size()<6) {
int numbers=random.nextInt(33)+1;
set.add(numbers);
}
System.out.println(set);
}