/**
* GetRandomNum.java
*/
package Algorithm;
import java.util.Arrays;
import java.util.Random;
import org.junit.Test;
/**
* @Author: chenxiaoyu
* @Date: 2013-8-4下午4:19:04
* @Description:
*/
public class RandomNum {
@Test
public void randomTest(){
int[] array = getRandom(10,30,20);
Arrays.sort(array);
print(array);
}
//生成大于等于begin小于end且没有重复的count个整数的问题
public static int[] getRandom(int begin, int end, int count){
if(count > end - begin){
System.out.println("error! Can't generate enough not repeated " + count +" nums between " + begin + " and " + end);
}
int[] array = new int[count];
int total = 0;
while(total < count){
Random random = new Random();
int num = random.nextInt(end-begin) + begin;
for(int i=0; i<count; i++){
if(array[i] == num)
break;
if(i == count-1){
array[total] = num;
total ++;
}
}
}
print(array);
return array;
}
private static void print(int[] array){
System.out.println("\n" + "length :" + array.length);
for(int i=0;i<array.length;i++){
System.out.print(array[i] + " ");
}
}
/*---------------------------------------------------------------------------------------------------------------------
*/
//编程珠玑12章 输入两个整数m和n,m<n,输出是0~n-1范围内的m个随机整数的有序列表,不允许重复。从概率角度说,我们希望得到没有重复的有序选择,其中每个出现的选择概率相等。
public void getknuth(int m,int n){
for(int i=0; i<n; i++){
//在剩余的n-i中选择m
Random random = new Random();
if(random.nextInt(n*10) % (n-i) < m){
System.out.println(i);
m--;
}
}
}
@Test
public void test(){
getknuth(100,100000);
}
}
随机数生成
最新推荐文章于 2024-11-24 09:11:05 发布