如题
  1、利用java api random如何实现?
  2、自己实现?

解决方案 »

  1.   

    使用不带参数的random()产生的随机数不会重复。
      

  2.   


    List list = new ArrayList();
    Random r = new Random();
    boolean b = true;
    int num;
    while (b) {
    num = r.nextInt(1000);
    if (!list.contains(num)) {
    list.add(num);
    }
    if(list.size() == 100){
    b = false;
    }
    }
    System.out.println(Arrays.asList(list));
      

  3.   


    Random ran=new Random();
    int r=0;
    m1:while(true){
    int n=ran.nextInt(10000);
    r=n;
    int[] bs=new int[4];
    for(int i=0;i<bs.length;i++){
    bs[i]=n%10;
    n/=10;
    }
    Arrays.sort(bs);
    for(int i=1;i<bs.length;i++){
    if(bs[i-1]==bs[i]){
    continue m1;
    }
    }
    break;
    }
    System.out.println(r);
      

  4.   

    人工干预了就不能称为随机了!import java.util.Random;public class RandomTest {    public static void main(String[] args) {
            System.out.println(random(4));
        }    public static String random(int n) {
            if (n < 1 || n > 10) {
                throw new IllegalArgumentException("cannot random " + n + " bit number");
            }
            Random ran = new Random();
            if (n == 1) {
                return String.valueOf(ran.nextInt(10));
            }
            int bitField = 0;
            char[] chs = new char[n];
            for (int i = 0; i < n; i++) {
                while(true) {
                    int k = ran.nextInt(10);
                    if( (bitField & (1 << k)) == 0) {
                        bitField |= 1 << k;
                        chs[i] = (char)(k + '0');
                        break;
                    }
                }
            }
            return new String(chs);
        }
    }
      

  5.   

    5楼能不能解释一下那个while里面的代码的意思呀怎么样的实现才叫“非人工干预”
      

  6.   

    使用一个 int 作为位域,实际上只用到了 int 32 位中的低 10 位。每生成一个数字 N 就将低第 N 位置为 1,若检查到当前位域为“1”时,则重新随机。“不重复”与“随机”就是一对矛盾,当加上“不重复”时,就需要干预随机数的生成。
      

  7.   

    最简洁的代码来啦....package com.xuyisen.monitor.test;import java.util.Random;public class Test {

    /**
     * 获取count个随机数
     * @param count 随机数个数
     * @return
     */
    public String game(int count){
    StringBuffer sb = new StringBuffer();
    String str = "0123456789";
    Random r = new Random();
    for(int i=0;i<count;i++){
    int num = r.nextInt(str.length());
    sb.append(str.charAt(num));
    str = str.replace((str.charAt(num)+""), "");
    }
    return sb.toString();
    } public static void main(String[] args) {
    Test t = new Test();
    System.out.println(t.game(4));
    }
    }
      

  8.   

    终于看懂5楼的bitfield的秒用了.....原来还可以这样判断值的存在性...厉害!