无重复的随机数发生器

Beh*_*azi 1 java random

我正在尝试使用一段代码,其中将生成随机数并将其保存在集合中,以便下次生成另一个随机数时,我可以检查这个新数字是否已经在列表中.

此方法的要点是生成1到118范围内的数字,不允许重复数字.

Random rand = new Random();
    randomNum2 = rand.nextInt(118) + 1;
    if (!generated.contains(randomNum2))
    {
        String strTemp = "whiteElements\\"+String.valueOf(randomNum2)+".JPG";
        btnPuzzlePiece2.setIcon(new ImageIcon(strTemp));
        generated.add(randomNum2);
        btnPuzzlePiece2.repaint();
    }
    else 
        setPicForBtnGame1();
Run Code Online (Sandbox Code Playgroud)

但问题在于这段代码,因为程序继续生成数字,有可能有一个正确的随机数(在没有重复的范围内)想象在运行方法110次后...方法生成有效随机数的可能性减少到不到1%...这使程序有可能永远不会有1-118的数字列表,也浪费了太多的过程.

那怎么能正确写出来呢?ps我想到制作118个对象并将它们保存在一个集合中,然后生成一个随机对象,然后从列表中删除该对象,这样下一个元素就不会被复制.

请帮帮我...

Kon*_*Kon 5

创建一个List,并使用您范围内的元素填充它.然后shuffle()列表,顺序是你的随机数.也就是说,第0个元素是你的第一个随机数,第一个元素是你的第二个随机数,等等.