java概率随机产生数字的问题

为了后续推广中,给其他用户起到促进作用,需要添加机器人数据,对初始数据累加随机数据。
1——10的几率:60%
10——20:20%
20——30:10%
30——40:5%
40——50%:2%
50——100:3%

利用权重进行配置,然后随机区间在0到所有权重总和之间,随即后的数到底落在哪个区间就可以了
这种方法简单,可扩展

will this solve your problem?

refer url:http://stackoverflow.com/questions/38838172/percentage-using-random

public int printNum(int num){
Random random = new Random();
int A = random.nextInt(10),
B = random.nextInt(10)+10,
C = random.nextInt(10)+20,
D = random.nextInt(10)+30,
E = random.nextInt(10)+40,
F = random.nextInt(49)+50;
int[] a={A,B,C,D,E,F};
int[] b={60,20,10,5,3,2};
int obj = 0;
int sum = 0;
for(int i=0; i<b.length;i++){
sum += b[i];
if(num <= sum){
obj = a[i];
break;
}
}
return obj;
}


借鉴了一下其他人,自己写了一下,大家觉得有不对的地方吗?


public static void main(String[] args) {
int sumcount = 60 + 20 + 10 + 5 + 2 + 3;
int[][] sum={{60,1,10},{20,10,20},{10,20,30},{5,30,40},{2,40,50},{3,50,100}};
String str = "";
for (int i = 0,len=sum.length; i < len; i++) {
str = getStringArray(sum[i][1], sum[i][2], sum[i][0]*100/sumcount, str);
}
System.out.println(str.split(",")[(int)(Math.random() * 100)]);
}

/**

  • @param a初始值
  • @param b结束值
  • @param c循环次数
  • @return */ public static String getStringArray(int a, int b, int c, String str) { for (int i = 0; i < c; i++) { String ran = ""; do { ran = ((int)(Math.random() * (b - a)) + 1 + a) + ""; } while (str.contains(ran));// 字符串str中是否包含ran字符串 if (str != null && !"".equals(str)) { str = str + "," + ran; } else { str = ran; } } return str; } 这个为什么一直执行不了

public class Test {
public static void main(String[] args) {
int[] n = new int[]{1, 2, 1, 3, 1};

    int sum = 0;
    for (int i = 0; i < n.length; i++) {
        sum +=  n[i];
    }

    int randNum = 100;
    int num = new Random().nextInt(randNum);
    int index = -1;
    float source = sum;
    for (int i = n.length -1; i >= 0 ; i--) {
        source = (source - n[i])/(float)sum;
        float target = num/(float)randNum;
        System.out.println("source:" + source);
        System.out.println("target:" + target);
        if (source < target) {
            index = i;
            break;
        }
    }

    System.out.println("随机到了第" + (index + 1) + "个值,内容为:" + n[index]);

}

}