我正在尝试使用一段代码,其中将生成一个随机数并将其保存在集合中,以便下次生成另一个随机数时,我可以检查这个新数字是否已经在列表中。
此方法的要点是生成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();
但问题在于这段代码,因为程序继续生成数字,有可能有一个正确的随机数(在没有重复的范围内)想象在运行方法110次后......方法生成的可能性有效的随机数减少到不到1%...这使程序有可能永远不会有1-118的数字列表,也浪费了太多的过程。
那我怎么能正确地写这个呢? p.s我想制作118个对象并将它们保存在一个集合中,然后生成一个随机对象,然后从列表中删除该对象,这样下一个元素就不会被复制了。
请帮帮我......
答案 0 :(得分:5)
创建一个List
,并使用您范围内的元素填充它。然后shuffle()
列表,订单是您的随机数。也就是说,第0个元素是你的第一个随机数,第一个元素是你的第二个随机数,等等。
答案 1 :(得分:-1)
生成永远不会重复的东西会不会更好? 没有重复的随机数通常称为UUID。
生成UUID的最简单方法是在随机数前加上当前系统时间(以毫秒为单位)。 当然,它有可能是重复的,但它很小。当然它可能很长,所以你想要对它进行base64编码,例如,减小它的大小。
使用编码可以将或多或少保证的UUID减少到大约8个字符。