我现在有这样的需求:在0-6中随机生成三个数,在每次生成的三个数中,不能有重复的。
例如
可以生成这样的:1,2,3
但是不能生成这样的:1,2,2请问这个怎么实现?

解决方案 »

  1.   

    楼主偶为你写了个:(实现了你想要的功能)
    import java.util.Random;public class TestRandom {
    public static void main(String[] args) {
    Random random = new Random();//创建Random类型的对象
    //用for循环生成6个数
    for (int i = 1; i <= 6; i++) {
    int k = random.nextInt();
    int j = Math.abs(k % 7);//获得0-6之间的随机数
    System.out.println(j);
    }
    }
    }
      

  2.   

    bug多多 见谅 呵呵。 boolean  isDup(int []random,int ran){
    for (int i = 0; i < random.length; i++) {
    if(random[i]==ran) return true;
    }
    return false;
    }
    public  int[] random(int start,int end,int len){
    int [] rst=new int[len];
    Arrays.fill(rst,start-1);
    Random r=new Random();
    for (int i = 0; i < rst.length; ) {
    int ran=r.nextInt(end-start+1)+start;

    if(!isDup(rst, ran)){
    rst[i++]=ran;
    }

    }
    return rst;
    }调用 random(0,6,3);
      

  3.   

    import   java.util.*; 
    public   class   Test 

            
            public   static   void   main(String[]   args) 
            { 
                    Set <Integer>   mySet   =   new   LinkedHashSet <Integer> (); 
                    while(mySet.size() <7) 
                    { 
                            mySet.add((int)(Math.random()*40+1)); 
                    } 
                    for(Integer   i:mySet) 
                    { 
                            System.out.print(i+"   "); 
                    } 
            } 
    }
      

  4.   


    package com.test;
    import java.util.*;
    public class Test {
        public Test() {
            Random rd = new Random();        
            HashSet set = new HashSet();        
            while(true){
                int i= rd.nextInt(7);
                set.add(new Integer(i));
                if(set.size()==3){
                    break;
                }
            }
            System.out.println("=====================================");
            Iterator iter = set.iterator();
            while (iter.hasNext()) {
                Integer item = (Integer) iter.next();
                System.out.println(item);
            }
            System.out.println("=====================================");
        }
        public static void main(String[] args) {
            //生成100次。都不重复
            for (int i = 0; i < 100; i++) {
                new Test();    
            }        
        }
    }
      

  5.   

    先将0-6放到一个数组里。然后先随机取0-6中一个数i,然后用arr[i]取出该数。然后将最后的那位然后将arr[6]取出,放到arr[i]中,然后取0-5中的一个数i,依次类推。想随机取几个数都可以
      

  6.   


    恩,谢谢各位。这样来说吧:
    Random  random = new Random();
    random.nextInt(6);我这样进行三次,得到三个在0-6之间的随机数,但是这样简单的进行三次是会导致这三个随机数之间又重复的情况,我怎么样经过过简单的处理就能是他们不重复,而且我不需要保存前一个随机数,也就是说,java在api层面上有没有提供这样的功能?
      

  7.   


    做了一个 ,通过了测试. 应该可用.import java.util.*;
    public class Test{
    public static void main(String[] args){
    //生成 [0-n) 个不重复的随机数
    //list 用来保存这些随机数
    ArrayList list = new ArrayList();


    int n = 10;
    Random rand = new Random();
    boolean[] bool = new boolean[n];

    int num =0;

    for (int i = 0; i<n; i++){


    do{
    //如果产生的数相同继续循环
        num = rand.nextInt(n);
     
    }while(bool[num]);

    bool[num] =true;

        list.add(num);


    }


    System.out.println (list);


    }
    }
      

  8.   

    我有个想法,不只是否可行,将所有随机数分别做为hashtable的key ,value。这样的话只要内存够大,10000个数都不成问题。