彩票玩法说明:
双色球投注区分为红球号码区和蓝球号码区,红球号码范围为1~33,蓝球号码范围为1~16。从33个红球中随机6个号码作为中奖号码,从16个蓝球中随机1个号码作为中奖号码,总共7个中奖号码。
这个案例中需要定义很多种方法,比如怎么随机选红球,蓝球,用户如何投注,如何将投注号码与中奖号码相匹配得出最后中了多少奖金。
定义用户投注号码的方法
能实现重复输出得益于死循环
因为有很多的限制条件,所以分支结构错综复杂
public static int[] userNumber (){
int [] numbers = new int[7] ;
//有六个红球,一个蓝球,分别处理
Scanner sc = new Scanner(System.in);
for (int i = 0; i < numbers.length-1 ; i++) {
while (true) {
System.out.println("请输入第"+(i+1)+"个红球的号码");
int number = sc.nextInt();
if(number<1||number>33){
System.out.println("对不起,输入的红球号码不在1-33中");
}else{
if(panD(numbers,number)){
System.out.println("对不起,号码重复");
}else{
numbers[i]=number;
break;
}
}
}
}
while (true) {
System.out.println("请输入最后一个蓝球号码(1-16)");
int number = sc.nextInt();
if(number<1||number>16){
System.out.println("对不起号码不对");
}else{
numbers[6] = number;
break;
}
}
return numbers;
}
判断红球号码是否和之前的重复
因为涉及多个红球,双色球规则不允许出现重复的红球,所以需要处理
public static boolean panD (int [] numbers,int number){ //判断红球号码是否和之前的重复
for (int i = 0; i <numbers.length ; i++) {
if(numbers[i]==number){
return true;
}
}
return false;
}
用户投注号码的功能就基本上实现了,接下来是随机生成中奖号码
设计一个方法,随机一组中奖号码
这个方法的分支条件中,也用到了判断红球是否重复的方法
public static int[] correctNumber (){
Random r = new Random();
int [] cNumber = new int[7];
for (int i = 0; i < cNumber.length-1; i++) {
while (true) {
int n = r.nextInt(33)+1;
if(panD(cNumber,n)){ //利用方法判断重复
}else{
cNumber[i] = n;
break;
}
}
//cNumber[i] = n;
}
int n2= r.nextInt(16)+1;
cNumber[6] = n2;
return cNumber;
}
投注号码与中奖号码对照是否中奖
利用循环遍历实现对照,最后根据规则添加各种中奖的分支进行判断
public static void judge(int []userNumber,int []correctNumber) {
int redCount = 0; //用来记录红篮球命中情况
int blueCount = 0;
for (int i = 0; i < userNumber.length - 1; i++) {
for (int i1 = 0; i1 < correctNumber.length - 1; i1++) {
if (userNumber[i] == correctNumber[i1]) {
redCount++; //红球每对一个,就加1
break;
}
}
}
blueCount = userNumber[6] == correctNumber[6] ? 1 : 0;//蓝球只有一个,只用关注1和0
System.out.println("您命中的红球数量为" + redCount);
System.out.println("您命中的蓝球数量为" + 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||redCount == 4 && blueCount == 1) {
System.out.println("中奖200元");
}else if (redCount == 4 && blueCount == 0||redCount == 3 && blueCount == 1){
System.out.println("中奖10元");
}else if (redCount <3 && blueCount == 1){
System.out.println("中奖5元");
}else{
System.out.println("没中奖");
}
}
最后完整代码奉上:
package com.casey;
import java.util.Random;
import java.util.Scanner;
//双色球
public class test4 {
public static void main(String[] args) {
int [] num = userNumber(); //把userNumber方法中的数据传递到【】num
System.out.println("您投注的号码为:");
zL(num);
int [] num2 = correctNumber();
System.out.println("本次中奖号码为:");
zL(num2);
judge(num,num2);
} //main
public static void zL (int[]arr){ //把数据整理成【 】的形式输出
System.out.print("[");
for (int i = 0; i <arr.length ; i++) {
System.out.print(i==arr.length-1? arr[i] : arr[i]+",");
}
System.out.println("]");
} //整理数组数据输出【 】形式
public static int[] userNumber (){
int [] numbers = new int[7] ;
//有六个红球,一个蓝球,分别处理
Scanner sc = new Scanner(System.in);
for (int i = 0; i < numbers.length-1 ; i++) {
while (true) {
System.out.println("请输入第"+(i+1)+"个红球的号码");
int number = sc.nextInt();
if(number<1||number>33){
System.out.println("对不起,输入的红球号码不在1-33中");
}else{
if(panD(numbers,number)){
System.out.println("对不起,号码重复");
}else{
numbers[i]=number;
break;
}
}
}
}
while (true) {
System.out.println("请输入最后一个蓝球号码(1-16)");
int number = sc.nextInt();
if(number<1||number>16){
System.out.println("对不起号码不对");
}else{
numbers[6] = number;
break;
}
}
return numbers;
} //用户投注号码
public static boolean panD (int [] numbers,int number){ //判断红球号码是否和之前的重复
for (int i = 0; i <numbers.length ; i++) {
if(numbers[i]==number){
return true;
}
}
return false;
} //判断红球是否重复
public static int[] correctNumber (){
Random r = new Random();
int [] cNumber = new int[7];
for (int i = 0; i < cNumber.length-1; i++) {
while (true) {
int n = r.nextInt(33)+1;
if(panD(cNumber,n)){ //利用方法判断重复
}else{
cNumber[i] = n;
break;
}
}
//cNumber[i] = n;
}
int n2= r.nextInt(16)+1;
cNumber[6] = n2;
return cNumber;
} //设计一个方法,随机一组中奖号码 //红球1-33,蓝球1-16
public static void judge(int []userNumber,int []correctNumber) {
int redCount = 0; //用来记录红篮球命中情况
int blueCount = 0;
for (int i = 0; i < userNumber.length - 1; i++) {
for (int i1 = 0; i1 < correctNumber.length - 1; i1++) {
if (userNumber[i] == correctNumber[i1]) {
redCount++; //红球每对一个,就加1
break;
}
}
}
blueCount = userNumber[6] == correctNumber[6] ? 1 : 0;//蓝球只有一个,只用关注1和0
System.out.println("您命中的红球数量为" + redCount);
System.out.println("您命中的蓝球数量为" + 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||redCount == 4 && blueCount == 1) {
System.out.println("中奖200元");
}else if (redCount == 4 && blueCount == 0||redCount == 3 && blueCount == 1){
System.out.println("中奖10元");
}else if (redCount <3 && blueCount == 1){
System.out.println("中奖5元");
}else{
System.out.println("没中奖");
}
} //相比较是否中奖
}