58,441
社区成员
发帖
与我相关
我的任务
分享
import java.util.Arrays;
import java.util.Random;
/*
* 生成一组随机的双色球彩票(一共7个数字,前六位随机范围为1-33,最后一位范围1-16),
* 使用数组保存生成的每次随机数。要求数组的前六位不能出现重复的数字。
* 提示:使用数组和二重循环。
*/
/*
* 思路:
* 1.生成1-33,随机打乱顺序获取前6位
* 2.最后1位用随机数实现
*/
public class Test {
public static void main(String[] args) {
System.out.println(Arrays.toString(getNumbers()));
}
static int[] getNumbers(){
int[] result = new int[7];//彩票号码
int[] arrays = new int[33];//1-33
for(int i = 0;i < arrays.length;i++)
arrays[i] = i + 1;
//随机打乱顺序
Random random = new Random();
for(int i = 0;i < arrays.length;i++){
int seed = random.nextInt(arrays.length);//下标为0-32
int temp = arrays[seed];
arrays[seed] = arrays[i];
arrays[i] = temp;
}
//设置彩票
for(int i = 0;i < result.length - 1;i++){
//设置前6位
result[i] = arrays[i];
}
//设置最后1位
result[result.length - 1] = random.nextInt(16) + 1;//获取1-16随机数
return result;
}
}
// 初始化抽奖
int[] result = new int[7];
Random rand = new Random();
// 初始化号码池
int[] pool = new int[33];
for (int i = 0; i < pool.length; i++) {
pool[i] = i + 1;
}
// 摇号:前6个
for (int i = 0; i < 6; i++) {
int pos = rand.nextInt(33 - i);
result[i] = pool[pos];
pool[pos] = pool[33 - 1 - i]; // 将奖池的最后一个数字置换掉当前的;
}
result[6] = rand.nextInt(16) + 1;
System.out.println(Arrays.toString(result));
// 初始化抽奖
int[] result = new int[7];
Random rand = new Random();
// 初始化号码池
ArrayList<Integer> lst = new ArrayList<Integer>();
for (int i = 1; i <= 33; i++) {
lst.add(i);
}
// 摇号:前6个
for (int i = 0; i < 6; i++) {
int pos = rand.nextInt(lst.size());
int num = lst.remove(pos);
result[i] = num;
}
result[6] = rand.nextInt(16) + 1;
System.out.println(Arrays.toString(result));