今天给大家分享一个Java经典案例——模拟双色球,通过这个案例对之前所学习的循环语句、数组、方法做一个简单的总结,下面先来看题目:
题目
在双色球系统中,其投注号码由六个红球和一个蓝球组成,其中红球从1-33中随机选出六个不同的号码,蓝球从1-16中随机选出一个。要求能够随机生成一串符合要求的中奖号码,并且在客户购买过双色球之后可以与中奖号码进行对比,并输出中奖数。
在看过题目之后,首先我们应该想到的思路是:“创建三个方法分别来实现中奖号码随机生成、客户购买双色球的信息录入、中奖号码与客户的比较”。
- 随机一组中奖号码
- 客户输入一组双色球
- 比较中奖号码与客户购买的双色球
随机一组中奖号码的实现
public static int[] win() { //随机生成六位不同的数
int[] win = new int[7];
Random rd = new Random(); //生成随机数
int count = 1; //判断中奖号码是否相同
for (int i = 0; i < win.length - 1; i++) {
do {
win[i] = rd.nextInt(33) + 1;
for (int j = 0; j < i; j++) {
if (win[i] == win[j]) {
count = 0;
break;
}
}
} while (count == 0);
}
win[6] = rd.nextInt(16) + 1;
return win;
}
这个方法的重中之重是判断中奖号码是否重复,并且能够在号码重复之后使其重新随机获取一个值。
实现方法:首先定义一个for循环,用来对其进行遍历并随机赋值,并在其中嵌套for循环和if语句来判断是否是重复的号码,若有重复则直接跳出循环,重新随机生成一个数对其赋值。这个地方是个关键点,如何实现它重新赋值呢?其中do.while循环是最适合的,它可以先运行再判断,刚好可以对应“先随机生成彩票号,再判断它是否符合要求,是否需要重新生成”。
客户输入双色球的实现
public static int[] input() { //客户自己输入双色球
int[] input1 = new int[7];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < input1.length; i++) {
if (i <= input1.length - 2) {
System.out.println("输入任意一个范围1-33的数字:");
} else {
System.out.println("输入任意一个范围1-16的数字:");
}
input1[i] = sc.nextInt();
}
return input1;
这个方法主要考察的是对数组的遍历以及对其的赋值,需要注意的是能够区分前六个号码与最后一个号码。
比较双色球的实现
public static int px(int []a,int[]b){ //比较中奖号码
int count =0;
for (int i = 0; i < a.length; i++) {
if (a[i]==b[i]){
count+=1;
}
}
return count;
}
这块代码主要考察的是对方法的定义,能够获取两个数组并且返回一个整型变量。
主函数的实现
public static void main(String[] args) {
int []win1 = win();
int []win2 = input();
int count = px(win1,win2);
System.out.println("中奖号码为:");
for (int i = 0; i < win1.length; i++) {
System.out.print(win1[i]+"\t");
}
System.out.println("相同号码数为:"+count);
}
这块代码主要考察的是对方法的调用, 以及获取方法返回的值。
完整代码
public static void main(String[] args) {
int []win1 = win();
int []win2 = input();
int count = px(win1,win2);
System.out.println("中奖号码为:");
for (int i = 0; i < win1.length; i++) {
System.out.print(win1[i]+"\t");
}
System.out.println("相同号码数为:"+count);
}
public static int[] win() { //随机生成六位不同的数
int[] win = new int[7];
Random rd = new Random();
int count = 1;
for (int i = 0; i < win.length - 1; i++) {
do {
win[i] = rd.nextInt(33) + 1;
for (int j = 0; j < i; j++) {
if (win[i] == win[j]) {
count = 0;
break;
}
}
} while (count == 0);
}
win[6] = rd.nextInt(16) + 1;
return win;
}
public static int[] input() { //客户自己输入双色球
int[] input1 = new int[7];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < input1.length; i++) {
if (i <= input1.length - 2) {
System.out.println("输入任意一个范围1-33的数字:");
} else {
System.out.println("输入任意一个范围1-16的数字:");
}
input1[i] = sc.nextInt();
}
return input1;
}
public static int px(int []a,int[]b){ //比较中奖号码
int count =0;
for (int i = 0; i < a.length; i++) {
if (a[i]==b[i]){
count+=1;
}
}
return count;
}
}
第一次写关于Java的案例,如有问题,还请提出!