2012-03-29 46 views
0

我的问题是我想让我的程序在0到3之间的数字范围内做出四个唯一的随机选择我试图在随机班级中做到这一点,但我不能,如果你可以帮助代码将是巨大的,我的计划将是这样的,以明确选择具有特定范围的唯一随机数

my range 

0 1 2 3 randomly chosen number 3 

0 1 2 randomly chosen number 1 

0 2  randomly chosen number 2 

0  it will choose 0 and then the program closes 
+1

请显示你写的代码。 – 2012-03-29 10:44:57

+1

您是从4组数字中选择4个随机数字(没有替换)?你真的想达到什么目的?你只是试图随机化数字0-3的序列? – 2012-03-29 10:51:10

+0

它实际上是一个功能不是整个程序,不试图随机我想要如果我从数组中选择一个元素,它不会再选择它 – ray 2012-03-29 11:02:23

回答

0

您可以填写一个(如果你并不需要太多的数字)ArrayList<Integer>序号为0 - 3。然后你使用Random.nextInt(list.size())获取随机索引,从列表中获取数字,并在您的索引处获取removeAt条目。

+0

ArrayList中没有removeAt方法,可以放一些代码,我已经尝试2小时解决它谢谢 – ray 2012-03-29 11:09:05

+0

对不起,它只是被称为'删除(索引)'。 – Neet 2012-03-29 11:18:12

+0

下面是一个例子:http://pastebin.com/ybLcnhYz – Neet 2012-03-29 11:22:16

8

您正在有效地查找从0n-1的整数的随机排列。

你可以把这一数字从0n-1ArrayList,然后在名单上调用Collections.shuffle(),然后从列表中逐一获取的数字:与发生的所有排列

final int n = 4; 
    final ArrayList<Integer> arr = new ArrayList<Integer>(n); 
    for (int i = 0; i < n; i++) { 
     arr.add(i); 
    } 
    Collections.shuffle(arr); 
    for (Integer val : arr) { 
     System.out.println(val); 
    } 

Collectons.shuffle()保证同等可能性。

如果你愿意,你可以封装此为Iterable

public class ChooseUnique implements Iterable<Integer> { 

     private final ArrayList<Integer> arr; 

     public ChooseUnique(int n) { 
      arr = new ArrayList<Integer>(n); 
      for (int i = 0; i < n; i++) { 
       arr.add(i); 
      } 
      Collections.shuffle(arr); 
     } 

     public Iterator iterator() { 
      return arr.iterator(); 
     } 
    } 

当你遍历这个类的一个实例,它会产生一个随机排列:

ChooseUnique ch = new ChooseUnique(4); 
    for (int val : ch) { 
     System.out.println(val); 
    } 

在一个特定的运行,这打印出1 0 2 3

+0

谢谢,但这并没有解决它,洗牌并不能确保唯一没有 – ray 2012-03-29 10:58:22

+1

@ray:其实,它的确如此。每个数字只出现在最终列表中一次。你有没有试过运行代码? – NPE 2012-03-29 10:59:29

+1

男士我很感激,非常感谢你 – ray 2012-03-29 11:16:53

0

如果你在某种类型的数组中有你的范围,那么只需在数组长度上随机使用。

例如,如果您有一个名为range的int数组。然后你可以使用:

java.utils.Random randomGenarator = new java.utils.Random(); 
return range[randomGenarator.nextInt(range.length)]; 
+0

这不是一个独特的数字感谢寿 – ray 2012-03-29 11:04:34

相关问题