获得0--n之内的不等概率随机整数,0概率最大,1次之,以此递减,n最小
- private
static int getAnyRandInt(int n){ -
int max = n+1; -
int bigend = ((1+max)*max)/2; -
Random rd = new Random(); -
int x = Math.abs(rd.nextInt()%bigend); -
int sum = 0; -
for(int i = 0; i -
sum += (max - i); -
if(sum>x){ -
return i; -
} -
} -
return -1; - }
等概率随机数与不等概率随机数
- public
class RandomTest { -
public static void main(String[] args){ -
Random ran1 = new Random(); -
Random ran2 = new Random(12345); -
-
System.out.println("The 1st set of random numbers:"); -
System.out.println("Integer:"+ran1.nextInt()); -
System.out.println("Long:"+ran1.nextLong()); -
System.out.println("Float:"+ran1.nextFloat()); -
System.out.println("Double:"+ran1.nextDouble()); -
-
System.out.println("The 2nd set of random numbers:"); -
for(int i = 0; i<</span>20; i++){ -
if(i%5 == 0){ -
System.out.println(); -
} -
System.out.print(ran2.nextInt()+ " "); -
} -
-
int[] rate = new int[10]; -
System.out.println(); -
int n = 0; -
for(int i = 0; i<</span>200; i++){ -
if(i%40 == 0){ -
System.out.println(); -
} -
n = getRandInt(10); -
rate[n]++; -
System.out.print(n+ " "); -
} -
-
displayRandRate(rate, "getRandInt等概率随机数0--9依次出现次数:"); -
-
Arrays.fill(rate, 0); -
for(int i = 0; i<</span>200; i++){ -
if(i%40 == 0){ -
System.out.println(); -
} -
n = getAnyRandInt(9); -
rate[n]++; -
System.out.print(n+ " "); -
} -
-
displayRandRate(rate, "getAnyRandInt不等概率随机数0--9依次出现次数:"); -
} -
-
//获得0--max-1之内的等概率随机整数 -
private static int getRandInt(int max){ -
Random rd = new Random(); -
return Math.abs(rd.nextInt()%max); -
} -
-
//获得0--n之内的不等概率随机整数,0概率最大,1次之,以此递减,n最小 -
private static int getAnyRandInt(int n){ -
int max = n+1; -
int bigend = ((1+max)*max)/2; -
Random rd = new Random(); -
int x = Math.abs(rd.nextInt()%bigend); -
int sum = 0; -
for(int i = 0; i -
sum += (max - i); -
if(sum>x){ -
return i; -
} -
} -
return -1; -
} -
-
private static void displayRandRate(int rate[], String description){ -
System.out.println(); -
System.out.println(); -
System.out.println(description); -
for(int i = 0; i -
System.out.print(rate[i]+ " "); -
} -
System.out.println(); -
} - }