该怎样生成这样的随机数?
第一个格子装入的数据范围为:1-29;  高概率区:1-7谢谢!!

解决方案 »

  1.   

    首先,自定义一个随机数类,用这个类来产生需要的随机数:主函数中的代码为:
    MyRandomNum m = new MyRandomNum();
    m.initBlocknum(6, 28);  //0~6等概率,7~28等概率
    m.initProbability(9, 1);  //两部分概率之比为9:1,可以根据需要自己设定
    int result = m.generateInt()+1;  //根据上面的设定,产生了一个1~29之间的随机数
    自定义的随机数类MyRandomNum代码如下import java.util.Random;public class MyRandomNum { public void initProbability(int... p) {
    probability = new int[p.length];
    for (int i = 0; i < p.length; i++)
    probability[i] = p[i];
    } public void initBlocknum(int... b) {
    blocknum = new int[b.length];
    for (int i = 0; i < b.length; i++)
    blocknum[i] = b[i];
    } public int generateInt() { if(probability == null)
    return -1;

    int[] b;
    b = blocknum;
    if(b.length != probability.length) {
    b = new int[probability.length];
    b[0] = 0;
    for(int i=1; i<probability.length; i++)
    b[i] = i<blocknum.length ? blocknum[i] : b[i-1]+1;
    }

    int max = 0;
    for(int x:probability)
    max += x;
    int index;
    int border = 0;
    int p = r.nextInt(max);
    for(index = 0; index<probability.length; index++) {
    border += probability[index];
    if(border > p)
    break;
    }
    int min = (index == 0 ? 0 : blocknum[index -1] +1);
    int scale = blocknum[index] - min + 1;
    int result = r.nextInt(scale) + min;
    return result;
    }

    public void adf(int[] x){

    }
    private int[] probability;
    private int[] blocknum; 
    private Random r= new Random();
    }