这是一个用随机数产生双色球号码的程序,为了增加难度,要求6个红球是1-33里随机选,不能重复,1个蓝球是1-16里随机选,不能和6个红球一样。
两种思路:1、直接产生随机数,遍历一下,若与之前任一个相同,就再随机数一次。
2、红球给个1-33的数组,每产生一个随机数,就从数组中该序号对应的数取出来, 数组也对应删除该数,因此随机数种子应注意递减。
public class Test {
public static void main(String[] args) {
int red[] = new int[7];// 为了方便,篮球也在这个数组里
boolean repeat;
for (int k = 0; k < 7; k++) {
int i;
do {
i = (int) (Math.random() * 33 + 1);
repeat = false;
for (int j = 0; j < 7; j++) {
if (i == red[j])
repeat = true;
}
if (k == 6 & i > 16)// 判断蓝色球的取值不能超过16
repeat = true;
} while (repeat);
red[k] = i;
}
for (int each : red) {
System.out.print(each + " ");// 第7个代表蓝色球
}
}
}
*******************************************************************************
public class Test {
public static void main(String[] args) {
// 基本思路:为红球定义一个1-33的池数组,为蓝球定义1-16的池数组
// 每次随机产生一个数,就从池数组里剔除掉
int redpool[] = new int[33];
int bluepool[] = new int[16];
for (int i = 0; i < 33; i++) {// 红球池数组初始化
redpool[i] = i + 1;
}
for (int i = 0; i < 16; i++) {// 蓝球池数组初始化
bluepool[i] = i + 1;
}
int red[] = new int[6];// 存储待产生的6个红球号码
for (int i = 0, zhongzi = 33; i < 6; i++, zhongzi--) {// 产生6个红球号码
int index = (int) (Math.random() * zhongzi);// 产生随机数,注意随机数种子要递减
red[i] = redpool[index];// 每个号码均从红球池里取
for (int j = index; j < redpool.length - 1; j++) {// 取了该值后,红球池数组要改写
redpool[j] = redpool[j + 1];// 该值后面的值均向前移动一位
}
}
System.out.print("6个红球号码为:");
for (int i : red) {
System.out.print(i + " ");
}
int blue;
do {
blue = (int) (Math.random() * 16 + 1);
} while ((blue == red[0]) || (blue == red[1]) || (blue == red[2])
|| (blue == red[3]) || (blue == red[4]) || (blue == red[5]));
System.out.println("蓝球号码为:" + blue);
}
}