我正在制作一个随机数(一种猜谜游戏),并提出了ff.代码生成10个一位或两位数字(1或10到40):
public void generate()
{
for(int i=0; i<=1; i++)
{
for(int l=0; l<10; l++)
{
Random rdm=new Random();
arr[l] = rdm.nextInt(range)+1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码仅回答生成10个随机一位或两位数字的需要.我需要让这个程序生成唯一的随机数.我怎样才能做到这一点?
对于后期更新感到抱歉...我想对这个程序做的是,如果数组包含重复项,那么该副本将被替换为唯一的...
==============解决================
新问题:
HashSet set=new HashSet();
Random random=new Random();
while(set.Size()<10)
{
set.add(random.nextInt(range)+1);
}
lbtest.setText(set.toString());
bgen.setEnabled(false);
gametext.setText("");
Run Code Online (Sandbox Code Playgroud)
按照ggrigery的要求:
这里是关于ggrigery建议的更新代码.
另一个选择是使用shuffle.
List<Integer> all = new ArrayList<>();
for(int i=1;i<=range;i++) all.add(i);
Collections.shuffle(all);
List<Integer> selected = all.subList(0, 10);
Run Code Online (Sandbox Code Playgroud)
如果要选择每个元素,如果要丢弃重复项,则可能需要很长时间才能找到最后一个随机值.无论选择一个还是所有元素,此方法都需要相同的时间.
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |