问题1:如题+++++++++++++++++++++++++++++++++++++++
问题2:把生成的数放到数组中,每产生一个就从之前产生的数组中判断有没有满4个,如果有就再产生一次,直到产生出84个为止。 这样是不是很慢?他的速度也不能确定?
问题2:把生成的数放到数组中,每产生一个就从之前产生的数组中判断有没有满4个,如果有就再产生一次,直到产生出84个为止。 这样是不是很慢?他的速度也不能确定?
调试欢乐多
import java.util.Map;
import java.util.Random;public class Test {
public static void main(String[] args) {
// 构建一个范围为0~21,数量为4的随机容器
RandomNumber random = new RandomNumber(21, 4);
// nums的大小为21*4
int[] nums = random.generator();
// 测试输出
for (int i:nums){
System.out.println(i);
}
}
}class RandomNumber {
/**
* 用于存放数字和数量的容量
*/
private Map<Integer, Integer> map = new HashMap<Integer, Integer>();
/**
* 存放的数字范围 0~num-1
*/
private int num;
/**
* 存放的数字数量
*/
private int count;
public RandomNumber(int num, int count) {
this.num = num;
this.count = count;
init();
}
/**
* 随机生成数num*count数量的数值
* @return 存放数值的数组
* @since 2008-1-9
*/
public int[] generator() {
int total = num * count;
int[] nums = new int[total];
int i = 0;
Random ran = new Random();
while (i < total) {
Integer k = getNum(ran.nextInt(num));
if (k != null) {
nums[i++] = k;
}
}
return nums;
}
/**
* 从容器中取出一个数值,
* @param random 需要取出的数值
* @return 取出的一个数值,已经取出了count数量的数字则返回null
* @since 2008-1-9
*/
private Integer getNum(int random) {
Integer num = map.get(random);
if (num > 0) {
map.put(random, --num);
return random;
} else {
return null;
}
}
/**
* 初始化容器
* @since 2008-1-9
*/
private void init() {
for (int i = 0; i < num; i++) {
map.put(i, count);
}
}
}
// TODO Auto-generated method stub
int [][] num = new int[20][4];
for(int i=0;i<20;i++){
for(int j=0;j<4;j++){
num[i][j]=(i+1);
}
}
}}这样?