日期:2014-05-20  浏览次数:20604 次

求大家来帮新手解决个随即数的问题
问题是:如何从0-9个数中依次随即取出5个,但是要保证这5个数都不相同,我自己想了很多方法,可是过程很繁琐,最终也没解决,希望大家帮我想个方法,并能给出用java写的过程,最好别太复杂了,小弟献出一半的分数谢大家。

------解决方案--------------------
1:用Set 生成随机数,放入set,当set的size==5时,结束
2:List里放0--9,用Collections.shuffle(list)乱序,取头5个

------解决方案--------------------
这个不是随机数,
初等数学里的排列与组合
------解决方案--------------------
Java code
import java.util.Random;
import java.util.Vector;

public class GetNum {

    private Vector<Integer> nums = null;
    private Random random = null;

    public GetNum() {
        nums = new Vector<Integer>(10);
        for (int i = 0; i < 10; i++) {
            nums.add(i);
        }
        random = new Random();
    }

    public Vector<Integer> getNum() {
        Vector<Integer> temp = new Vector<Integer>(5);
        for (int i = 0; i < 5; i++) {
            Integer integer = nums.get(random.nextInt(nums.size()));
            temp.add(integer);
            nums.remove(integer);
        }
        return temp;
    }

    public static void main(String... args) {
        GetNum num = new GetNum();
        System.out.println(num.getNum());
    }

}

------解决方案--------------------
Java code

Random random = new Random();
        Set<Integer> s = new HashSet<Integer>();
        
        while(true){
            int temp = random.nextInt(9);
            s.add(temp);
            if(s.size()==5) break;
        }
        
        for (Integer integer : s) {
        System.out.println(integer);    
        }

------解决方案--------------------
支持1楼的第2种方法,很佩服这想法
------解决方案--------------------
http://topic.csdn.net/u/20111012/14/11b025f0-e55a-4db7-bcb8-14f312fbaa06.html

看4楼的
------解决方案--------------------
Random r=new Random();
Set<Integer> set=new HashSet<Integer>();
whiel(set.size<6){
int count=r.nextInt(9);
set.add(count);
}
for(int count:set){
System.out.println(count);
}
------解决方案--------------------
0 =< nextInt(n) < n
------解决方案--------------------
方法一:
Java code

public List getRandomNumber(){
        List all=new ArrayList();
        for(int i=0;i<10;i++)all.add(i);//先放10个数到一个集合中
        
        List num=new ArrayList();
        for(int i=0;i<5;i++){  //获取5次
            int index=(int)(Math.random()*(10-i));//每次产生一个随机索引
            num.add(all.get(index));//获取索引处元素放置到num集合中
            all.remove(index);//删除刚才已经获取的元素
                           //注意每删除一个all集合中少一个元素,索引范围会缩小
        }
        return num;
    }

------解决方案--------------------
int a[]={0,1,2,3,4,5,6,7,8,9}
for(int i=0;i<5;i++){
nextInt(a.length-1)
}
------解决方案--------------------
Java code
public class RandomNumber {
    public static void main(String[] args) {
        List<Integer> list=new ArrayList<Integer>();
        Random roand= new Random();
        int i=0;
        while(i<5)
        {
            int num= roand.nextInt(10);
            if(!list.contains(num))
            {
                list.add(num);
                i++;
            }
        }
        
        for(int j=0;j<list.size();j++)
        {
            System.out.println(list.get(j));
        }
    }
}