实验目的 掌握随机函数的使用
主要仪器设备及耗材 安装了 JDK1.8 的 PC 一台
实验内容
1.设计一个抽奖程序,程序通过随机方式产生中奖序号。程序可以设置序号包含数字位数 和最大序号,一次抽取几个中奖序号(最少 1 个序号,最多不超过 2 个序号)和总共中奖 人数(最少 5 人)。抽奖过程分多轮进行,最后现实出所有的中奖的序号。
package com.temp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Scanner;
/**
* @Author lanxiaofang
* @email [email protected]
* @date 2020/10/26 8:14
*/
public class LuckDrawBox {
public static void main(String[] args) throws Exception{
Random random = new Random();
Scanner scanner = new Scanner(System.in);
System.out.println("----请问程序包含数字位数是:");
int num_cnt = scanner.nextInt();
int num_digit = (int)Math.pow(10, num_cnt);
if(num_cnt <= 10) {
System.out.println("----请问数字最大序号是:");
int max_num = scanner.nextInt();
if(max_num >= num_digit) {
System.out.println("----数字最大序号要求小于" + num_digit);
} /*这一段用不到,因为系统会自动报错
* else if(max_num > Integer.MAX_VALUE) { System.out.println("----数字最大序号要求小于" +
* Integer.MAX_VALUE); }
*/
else {
System.out.println("----请问您需要设置几个中奖序号,以空格隔开(最少 1 个序号,最多不超过 2 个序号)?");
int listLength = scanner.nextInt();
if(listLength == 1 || listLength == 2) {
int[] winList = new int[listLength+1];
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
for(int i=0; i<listLength; i++) {
System.out.println("请输入第"+(i+1)+"个中奖序号");
winList[i] = Integer.parseInt(bufferedReader.readLine());
System.out.println("----您输入的中奖序号有:"+winList[i]);
}
System.out.println("----请问总共中奖人数是:");
int sum_winner_cnt = scanner.nextInt();
if(sum_winner_cnt>=5) {
int winner_cnt = 0, random_cnt = 0;
while(winner_cnt < sum_winner_cnt) {
int randomNum = random.nextInt(max_num);//生成一个不超过max_num的随机值
//生成num_cnt位的随机值,就是生成一个小于num_digit的数,当随机数小于num_digit/10时,加上num_digit/10来确保位数
//比如生成一个4位数的随机值,那么就是生成一个小于10000(最大9999)的随机整数,当随机数小于1000时,加上1000,来确保位数。
if(randomNum < num_digit/10) {
randomNum += num_digit/10;
}
System.out.println("----这是第"+ ++random_cnt +"次抽奖,生成的随机数是"+randomNum);
for(int i : winList) {
if(i==randomNum) {
++winner_cnt;
System.out.println("****第"+winner_cnt+"个中奖的人:"+"第"+random_cnt+"个人中奖啦");
}
}
}
}else {
System.out.println("----总共中奖人数(最少 5 人)");
}
bufferedReader.close();
}else {
System.out.println("----最少 1 个序号,最多不超过 2 个序号");
}
}
}else {
System.out.println("您需要的数字位数太长");
}
}
}
结果: