使用java编写一个基础的彩票抽奖程序
这段代码实现了一个双色球彩票模拟程序,主要流程如下:
1.生成中奖号码
通过 createNumber() 方法随机生成 6 个不重复的红球号码(1-33)和 1 个蓝球号码(1-16),存入数组。
2.用户输入号码
用户依次输入 6 个红球号码,输入时会校验范围和是否重复。最后输入 1 个蓝球号码,并校验范围。
3.判断中奖情况
通过遍历,统计用户红球和蓝球与中奖号码的匹配个数。根据匹配结果判断中奖等级,并输出相应提示。
4.结果展示
程序最后会打印中奖号码和用户选择的号码,方便对比。
辅助方法
createNumber() 用于生成中奖号码,保证红球不重复。
contains() 用于判断号码是否已存在于数组中,避免重复。
import java.util.Scanner;
import java.util.Random;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//生成中奖号码int[] arr = createNumber();//用户输入号码int[] user = new int[7];System.out.println("请输入您选择的6个红球号码(1-33)");int number = 0;for (int i = 0; i < user.length-1; ) {number = sc.nextInt();if (number > 0 && number < 34) {boolean flag = contains(user, number);if (!flag) {user[i] = number;i++;} else {System.out.println("号码重复,请重新输入");}} else {System.out.println("输入错误,请重新输入");}}System.out.println("请输入您选择的蓝球号码(1-16)");int number1 = 0;number1 = sc.nextInt();if (number1 > 0 && number1 < 17) {user[user.length-1] = number1;} else {System.out.println("输入错误,请重新输入");}//判断号码是否中奖int redCount = 0;for (int i = 0; i < user.length-1; i++) {for (int j = 0; j < arr.length-1; j++) {if (user[i] == arr[j]) {//若找到了则跳出循环,判断下一次是否中奖redCount++;break;}}}int blueCount = 0;if (user[user.length-1] == arr[arr.length-1]) {blueCount++;}//判断中奖等级if (redCount == 6 && blueCount == 1) {System.out.println("恭喜您,中了1000万");} else if (redCount == 6 && blueCount == 0) {System.out.println("恭喜您,中了500万");} else if (redCount == 5 && blueCount == 1) {System.out.println("恭喜您,中了3000元");} else if (redCount == 5 && blueCount == 0) {System.out.println("恭喜您,中了1000元");} else if (redCount == 4 && blueCount == 1) {System.out.println("恭喜您,中了100元");} else {System.out.println("很遗憾,您没有中奖");}//打印中奖号码System.out.println("中奖号码为:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}//打印用户号码System.out.println();System.out.println("您选择的号码为:");for (int i = 0; i < user.length; i++) {System.out.print(user[i] + " ");}}//创建数组用于添加中奖号码public static int[] createNumber() {Random r = new Random();//6个红球,1个蓝球int[] arr = new int[7];//随机生成号码添加到数组中for (int i = 0; i < 6; ) {//红球范围1-33int red = r.nextInt(33) + 1;boolean flag = contains(arr, red);if (!flag) {//将红球添加到数组中arr[i] = red;i++;}}for (int i = 0; i < 1; i++) {//蓝球范围1-16int blue = r.nextInt(16) + 1;//将蓝球添加到数组中arr[6] = blue;}return arr;}//判断红球是否重复public static boolean contains(int[] arr, int num) {for (int i = 0; i < arr.length; i++) {if (arr[i] == num) {return true;}}return false;}
}
这段代码的主要缺陷有:
1.用户输入蓝球号码时未循环校验
如果用户第一次输入蓝球号码不合法,程序只提示错误但不会让用户重新输入,导致蓝球号码可能为默认值 0。
2.contains 方法判断重复有漏洞
在用户输入红球号码时,contains 方法会检查整个数组,但数组中未填充的元素为 0,可能导致误判(如用户输入 0 时会被判为重复)。
3.中奖号码和用户号码的输出格式不美观
没有对输出做格式化,结果展示不够清晰。
4.未关闭 Scanner
使用完 Scanner 后未关闭,可能导致资源泄漏。
5.未做异常处理
欢迎大家修正并提高