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之间打印数字而不重复。它是一个生成随机起始编号的程序。
答案 0 :(得分:4)
使用首选数字填充列表,然后将其随机播放,例如使用如下的内置库功能。
List<Integer> myNumbers = Arrays.asList(1,2,3,4, etc.);
Collections.shuffle(myNumbers);
然后简单地遍历列表。
不过,这被称为随机排列。答案 1 :(得分:0)
您可以使用1-45填充链接列表,并从列表中重复删除一个随机选择的索引。
答案 2 :(得分:0)
创建一个数组或一些集合,用数字填充它,然后使用两个randoms将其洗牌。
答案 3 :(得分:0)
重复这个,直到你得到所有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)
您应该查看TreeSet
和HashSet
。这些集合不会存储任何重复项。
在这里阅读更多相关信息:
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