一、随机生成一组中奖号码
要求:投注号码由6个红色球和1个蓝色球号码组成。红色球号码从1-33中选择;蓝色球号码从1-16中选择。 中奖号码由6个红球和一个蓝球组成(6个红球要求不能重复)
使用方法:
1.定义一个动态初始化的数组,存储7个数字
int[] numbers = new int[7];
2.遍历数组,为每个位置生成对应的号码。(注意:遍历前6个位置,生成6个不重复的红球号码,范围是1-33),在此期间需要判断当前随机的号码是否出现过,如果出现过则需要出现随机一个,直到不重复为止,才可以存入数组。
因此需要使用循环来对此进行判断,因为不知道需要循环多少次,所以使用死循环;
//生成六个号码
for (int i = 0; i <numbers.length-1 ; i++) {
//用一个死循环为当前位置找出一个不重复的1-33之间的数字
while(true) {
//定义一个变量来记录随机生成的整数型
int data = r.nextInt(33) + 1;
//c:判断当前随机的号码是否出现过,若出现过要重新随机一个,直到不重复为止,才可以存入数组
//定义一个flag,默认data没有重复
boolean flag=true;
//使用for循环查找在数组中已经录入的数字有无重复出现的数字,
//如果有则将flag改为false
for (int j = 0; j <i; j++) {
if (numbers[j]==data){
//data当前这个数据之前出现过,不能用
flag=false;
break;
}
}
//当flag为true时,数据可以存到numbers数组中去
if(flag){
// data这个数据之前没有出现过,可以使用
numbers[i]=data;
break;
}
}
}
又因为不知道随机出现的数会不会与前面的数产生重复,所以需要一个flag来定义,若是重复的话,flag将其数据丢弃,并跳出循环,再次去随机一个数,直到出现的数与前面不重复为止。
当这些数全部不重复后,才可以存入到数组中去。此为红球号码的遍历
蓝球号码的遍历不需要思考重不重复,因为他只是占了七个数据中的一个数据,而且还可以和前面的红球号码重复。所以蓝球号码的遍历为:
numbers[numbers.length-1]=r.nextInt(16)+1;
二、用户输入一组双色球号码
1.定义一个方法,录入用户输入的6个红球和1个蓝球
public static int[] UserInputNumber(){
//a:定义一个数组存储7个号码
int[] numbers=new int[7];
//b:让用户录入6个红球号码
Scanner sc=new Scanner(System.in);
for (int i = 0; i <numbers.length-1; i++) {
System.out.println("请您输入第"+(i+1)+"个红球号码(1-33,要求不重复)");
int data=sc.nextInt();
//c.把当前录入的数据存入到数组中去
numbers[i]=data;
}
//d.单独录入一个蓝球号码
System.out.println("请您输入篮球号码(1-16):");
numbers[6]=sc.nextInt();
return numbers;
}
2.调用方法使用户输入号码
int[] UserNumbers=UserInputNumber();
三、判断中奖情况
1.定义一个方法,接收中奖号码的数组,用户选号的数组
定义两个变量分别存储红球命中个数和蓝球命中个数
int redHitNumbers=0;
int blueHitNumbers=0;
判断红球命中了几个,并且统计
for (int i = 0; i < UserNumbers.length-1; i++) {
for (int j = 0; j < LuckNumbers.length-1; j++) {
//每次找到相等了,意味着当前号码命中了
if(UserNumbers[i]==LuckNumbers[j]){
redHitNumbers++;
break;
}
}
}
蓝球号码是否命中
blueHitNumbers=LuckNumbers[6]==UserNumbers[6]?1:0;
将中奖的号码和投注的号码以及命中红球个数,是否命中蓝球输出给用户查看
System.out.println("中奖号码是");
printArray(LuckNumbers);
System.out.println("您投注的号码是");
printArray(UserNumbers);
System.out.println("您命中了几个红球:"+redHitNumbers);
System.out.println("您是否命中了蓝球:"+(blueHitNumbers==1?"是":"否"));
开始判断中奖情况
if(blueHitNumbers==1 &&redHitNumbers<3){
System.out.println("恭喜您,中了五元");
}else if(blueHitNumbers==1&&redHitNumbers==3
||blueHitNumbers==0&&redHitNumbers==4){
System.out.println("恭喜你,中了十元");
}else if(blueHitNumbers==1&&redHitNumbers==4
||blueHitNumbers==0&&redHitNumbers==5){
System.out.println("恭喜你,中了两百元");
}else if(blueHitNumbers==1&&redHitNumbers==5){
System.out.println("恭喜你,中了三千元");
}else if(blueHitNumbers==0&&redHitNumbers==6){
System.out.println("恭喜你,中了五百万");
}else if(blueHitNumbers==1&&redHitNumbers==6){
System.out.println("恭喜你,中了一千万");
}else{
System.out.println("您没中奖");
}
四、将上面几个方法调用到main方法里
//1.随机6个红球号码(1-33,不能重复),随机一个蓝球号码(1-16),可以采用数组装起来作为中奖号码
int[] LuckNumbers=createLuckNumber();
//2.调用一个方法让用户输入7个号码,作为用户选号
int[] UserNumbers=UserInputNumber();
//3.判断中奖情况
juge(LuckNumbers,UserNumbers);