随机数无重复

时间:2014-04-06 19:53:44

标签: java

public class startOrder {


public static void main(String[] args) {
int[] start = new int[45];

for(int i=0;i<start.length;i++)
{
    start[i] = (int)(Math.random()*45);
}

for(int i=0;i<start.length;i++)
{
    System.out.println(start[i]);
}
}

}

我想制作一个简单的程序,只打印1-45之间的所有随机数。但问题是它们中有重复的数字,如何在1-45之间打印数字而不重复。它是一个生成随机起始编号的程序。

7 个答案:

答案 0 :(得分:4)

使用首选数字填充列表,然后将其随机播放,例如使用如下的内置库功能。

List<Integer> myNumbers = Arrays.asList(1,2,3,4, etc.);
Collections.shuffle(myNumbers);

然后简单地遍历列表。

不过,这被称为随机排列。

答案 1 :(得分:0)

您可以使用1-45填充链接列表,并从列表中重复删除一个随机选择的索引。

答案 2 :(得分:0)

创建一个数组或一些集合,用数字填充它,然后使用两个randoms将其洗牌。

答案 3 :(得分:0)

  1. 创建一个大小为45的布尔数组bArray,其中所有位置都设置为false(这意味着该数字尚未被选中)。
  2. 每当你选择一个数字时,假设你选择了15,检查bArray [15]是否为假。如果是,请选择该号码并将bArray [15]指定为true(这意味着现在采用该号码)。
  3. 重复这个,直到你得到所有45个数字!

答案 4 :(得分:0)

您可以使用HashSet

public static void main(String[] args)
{
    Set<Integer> start = new HashSet<Integer>();

    while (start.size() <= 45)
    {
        start.add((int) (Math.random() * 45)+1);
    }

    for (int i: start)
    {
        System.out.println(i);
    }
}

Set不允许重复,因此当您达到45的大小时,您拥有1到45之间的所有唯一数字!还要记住,你的随机代码生成了一个0到44之间的数字,我修复了这个数字。

答案 5 :(得分:0)

只需使用Set

Set<Integer> start = new HashSet<Integer>();

Set'旨在消除重复值

答案 6 :(得分:0)

您应该查看TreeSetHashSet。这些集合不会存储任何重复项。

在这里阅读更多相关信息:

HashSet ---&gt; http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html

TreeSet ---&gt; http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html

另外,请阅读另一篇关于HashSet与TreeSet的Stackoverflow帖子,我强烈建议您阅读它。阅读热门评论:Hashset vs Treeset