双色球,6个红球,1个蓝球,而且红球中的数据不能重复,红球的数字范围为1-33,蓝球的数字范围为1-16。
然后我们作为彩民,自己买号,在模拟器中则自己依次输入每个球对应的号码,最后开奖的时候判断我们中了多少。
双色球中奖规则:
我当时看到这个案例,感觉很麻烦,首先我认为最难搞的方面是,生成红球的随机数,这个数我网上查了一下,双色球的数字是不能重复的,那么我就得要生成不同的6个随机数,然后存到数组里。怎么实现,当时我还在想。
后来我就先把程序的功能先分块:
1.随机生成中奖号码,定义一个数组长度为6的int 类型的数组存红球的号码,且红球的数组中数据不能有相同的,定义数组长度为1的数组来存蓝球号码。
2.用户也是我,依次输入我的红球号码和蓝球号码。
3.统计结果,双色球要顺序和数字都相同才算有效,也就是说,数组的索引和索引对应的数据都要相同才可以。
4.判断结果。
然后我就开始写
第一部分
//随机生成中奖号码Scanner sc = new Scanner(System.in);Random r = new Random();int[] red = new int[6];int [] blue=new int[1];blue [0]= r.nextInt(16) + 1;//随机生成蓝球的号码System.out.println(blue[0]);for (int i = 0; i < red.length; ) { //随机生成红球号码,且随机数不能重复int a = r.nextInt(33) + 1;boolean b = Shuijishupanduan(red, a);if (!b) {red[i] = a;i++;}}
在其中我调用了一个有返回值的方法,用来判断随机数是否重复的,这是我认为最难的地方,但是我也想出来了哈哈哈。方法是这样的:
//判断随机数是否相同的方法public static boolean Shuijishupanduan(int[] arr, int a) {for (int i = 0; i < arr.length; i++) {if (arr[i] == a) {return true;}}return false;
返回一个boolean类型,然后i++放在,if语句中,就表示随机数一直生成,到这个随机数在数组中没有相同的时候就存入数组中,然后才能 i 自增到数组中下一位循环。在这里我设了随机数的范围是1-33.
第二部分
//用户输入自己的号码int []arr=new int[6];int []arr1=new int[1];System.out.println("覃泺宇牌双色球,赢到手麻");int n=1;for (int i = 0; i < arr.length; i++) {System.out.println("请输入你的第"+n+"个红球的号码:");int shuru=sc.nextInt();arr[i]=shuru;n++;}System.out.println("请输入蓝球的号码:");int B=sc.nextInt();arr1[0]=B;
简单的遍历数组,然后给数组塞数据,逐个塞进去,定义了2个数组来存我自己输入的数据,然后后面就可以和之前随机生成的中奖号码的两个数组(一个红球的,一个蓝球的)进行比较。(索引相同的数据也相同才算有效)
第三部分
//判断红、蓝球有几个和中奖号码相同的,红球和蓝球分开统计。int RED=xiangtong(red,arr);int BULE=xiangtong(blue,arr1);
判断两个数组有几个数据相同,再定义一个计数器来统计相同的个数就完事了,那么我又要比红球的,又要比蓝球的,这两种是重复的工作,我当时就定义了一个方法,输入要比较的两个数组,就可以返回他们有几个相同索引数据也一样的元素。
//判断两个数组有多少个相同的数据public static int xiangtong(int arr1[],int arr2[]) {int xiangtongshu=0;for (int i = 0; i < arr1.length; i++) {if (arr2[i]==arr1[i]){ //双色球的号码要相同,而且还要对应的位置也相同(也就是俩数组的相同索引的数据要一样)xiangtongshu++;}}return xiangtongshu;
第四部分
就是判断结果了,依照上图的规则,用if语句就可以了,然后我就也定义了一个方法,只要输入红球中的数和蓝球中的数,便可返回几等奖。
//判断奖项public static void jiang(int r,int b){if (r==6 && b==1){System.out.println("恭喜你!中了一等奖,奖金1000万元!");}else if (r==6 && b==0){System.out.println("恭喜你!中了二等奖,奖金500万元!");}else if (r==5 && b==1){System.out.println("恭喜你!中了三等奖,奖金3000元!");}else if ((r==5 && b==0)||(r==4 && b==1)){System.out.println("恭喜你!中了个四等奖,奖金200元!");} else if ((r==4 && b==0)||(r==3&&b==1)){System.out.println("恭喜你!中了个五等奖,奖金10元");}else if ((r==2&&b==1)||(r==1&&b==1)||(r==0&&b==1)){System.out.println("恭喜你!大怨种,中了六等奖,奖金5元");}}
再调用一下方法
jiang(RED,BULE);
总体的程序是这样的:
package Test;import java.util.Random;
import java.util.Scanner;public class Shangseqiu {public static void main(String[] args) {//随机生成中奖号码Scanner sc = new Scanner(System.in);Random r = new Random();int[] red = new int[6];int[] blue = new int[1];blue[0] = r.nextInt(16) + 1;//随机生成蓝球的号码for (int i = 0; i < red.length; ) { //随机生成红球号码,且随机数不能重复int a = r.nextInt(33) + 1;boolean b = Shuijishupanduan(red, a);if (!b) {red[i] = a;i++;}}//用户输入自己的号码int[] arr = new int[6];int[] arr1 = new int[1];System.out.println("覃泺宇牌双色球,赢到手麻");int n = 1;for (int i = 0; i < arr.length; i++) {System.out.println("请输入你的第" + n + "个红球的号码:");int shuru = sc.nextInt();arr[i] = shuru;n++;}System.out.println("请输入蓝球的号码:");int B = sc.nextInt();arr1[0] = B;//判断红、蓝球有几个和中奖号码相同的,红球和蓝球分开统计。int RED = xiangtong(red, arr);int BULE = xiangtong(blue, arr1);//根据统计的红球和蓝球相同的结果,分析所中的奖项,有普适性可以写成方法,只要输入红球和蓝球相同的个数就得结果jiang(RED, BULE);}//判断随机数是否相同的方法public static boolean Shuijishupanduan(int[] arr, int a) {for (int i = 0; i < arr.length; i++) {if (arr[i] == a) {return true;}}return false;}//判断两个数组有多少个相同的数据public static int xiangtong(int arr1[], int arr2[]) {int xiangtongshu = 0;for (int i = 0; i < arr1.length; i++) {if (arr2[i] == arr1[i]) { //双色球的号码要相同,而且还要对应的位置也相同(也就是俩数组的相同索引的数据要一样)xiangtongshu++;}}return xiangtongshu;}//判断奖项public static void jiang(int r, int b) {if (r == 6 && b == 1) {System.out.println("恭喜你!中了一等奖,奖金1000万元!");} else if (r == 6 && b == 0) {System.out.println("恭喜你!中了二等奖,奖金500万元!");} else if (r == 5 && b == 1) {System.out.println("恭喜你!中了三等奖,奖金3000元!");} else if ((r == 5 && b == 0) || (r == 4 && b == 1)) {System.out.println("恭喜你!中了个四等奖,奖金200元!");} else if ((r == 4 && b == 0) || (r == 3 && b == 1)) {System.out.println("恭喜你!中了个五等奖,奖金10元");} else if ((r == 2 && b == 1) || (r == 1 && b == 1) || (r == 0 && b == 1)) {System.out.println("恭喜你!大怨种,中了六等奖,奖金5元");}}
}
花了我打gogo的时间,弄个双色球模拟,总体不算太难,最麻烦的部分我还是感觉是那个随机数不能重复的部分,我想了一些时间。i++放在if语句里很精髓我感觉。
我打的草稿。思路应该还是清晰的我认为。