题目如下:
由题意,我将构造满足以下要求的五个方法对题目进行实现:
1.对中奖号码的确定。
2.对重复号码的判定。
3.用户输入自己的中奖号码进行验证。
4.判断中奖球的次数以及球的颜色。
5.判断中奖的金额。
以下进行逐个实现:
在开始之前,我定义了几个全局的静态变量,有利于数据的传递
static Random r = new Random();//随机数生成类 static Scanner sc = new Scanner(System.in);//键盘的录入类 static int redCount = 0,blueCount = 0;//前为记录红球中奖的次数,后为记录蓝球中奖的次数
1.对中奖号码的确定。
public static int[] Create(){
int[]arr = new int[7];
//以下为生成红色球的中奖号码
for (int i = 0; i < arr.length-1; ) {
int redNum = r.nextInt(33)+1;
//以下的ifExist函数会在下面补充,是对重复元素的判断!
if(ifExist(arr,redNum)){
continue;
}
else {
arr[i] = redNum;
i++;
}
}
//以下为生成蓝色球的中奖号码
int blueNum = r.nextInt(16)+1;
arr[arr.length-1] = blueNum;
return arr;
}
2.对重复号码的判定。
//传入的参数为已经录入数据的数组,以及需要判断是否存在的数字
public static boolean ifExist(int[]arr,int ra){
for (int i = 0; i < arr.length; i++) {
if(arr[i] == ra){
return true;//存在则返回是
}
}
return false;//如果代码运行到此处则说明,没有存在重复,则返回否
}
3.用户输入自己的中奖号码进行验证。
public static int[] userNum(){
int[]arr = new int[7];
System.out.println("请输入你的中奖号码!");
for (int i = 0; i < arr.length; ) {
//此处的减一是为区分红球和蓝球
if(i<arr.length-1){
System.out.println("您现在正在输入第"+(i+1)+"个红色球");
int rednum = sc.nextInt();
//需对输入的号码控制在1~33才能符合题目的要求!
if(rednum>0 && rednum<34){
if(ifExist(arr,rednum)){
System.out.println("您输入的号码已经存在,请重新输入!");
}
else{
arr[i] = rednum;
i++;
}
}
else
System.out.println("您输入的第"+(i+1)+"个红球超过了范围");
}
//以下对蓝球进行录入操作
else {
System.out.println("您现在输入的是蓝球的号码");
int blueNum = sc.nextInt();
//控制蓝球在1~16的范围内符合题目的要求
if(blueNum>0 && blueNum<17){
arr[i] = blueNum;
i++;
}
else
System.out.println("你输入的超过了蓝球的范围!");
}
}
return arr;
}
4.判断中奖球的次数以及球的颜色。
public static String ifWin(int[] winingNum,int[] userNum){
for (int i = 0; i < userNum.length; i++) {
if(i<userNum.length-1){
//这里继续运用上面的存在重复元素方法,对用户输入的元素在中奖数组里面判断是否重复
//如果是,则就是中奖了,则对红球的中奖次数进行加一操作。
//如果不是则会随着i++而跳过该元素,继续判断接下来的元素。
if(ifExist(winingNum,userNum[i])){
redCount++;
}
}
//以下是对蓝球的中奖次数进行判断,因为蓝球存在数组的末尾位置,故位置为(arr.length-1)。
else {
if(userNum[userNum.length-1] == winingNum[winingNum.length-1])
blueCount++;
}
}
//这里直接返回结果字符串,在主函数中直接输出即可!
return "此次中奖结果为\t红球:"+redCount+"个,"+"蓝球:"+blueCount+"个";
}
5.判断中奖的金额。
//在上述方法就会得到具体的各球中奖次数,然后就可以进行判断具体奖金
//因为我设置了全局变量,所以该方法并不需要传入如何的参数。
public static String judgeBonus(){
if(redCount == 0 && blueCount == 1 || redCount == 1 && blueCount == 1 || redCount == 2 && blueCount == 1 )
return "获得5元奖金!";
else if(redCount == 3 && blueCount == 1 || redCount == 4 && blueCount == 0)
return "获得10元奖金!";
else if(redCount == 4 && blueCount == 1 || redCount == 5 && blueCount == 0)
return "获得200元奖金!";
else if(redCount == 5 && blueCount == 1)
return "获得3000奖金!";
else if(redCount == 6 && blueCount == 0)
return "获得5000000奖金!";
else if(redCount == 6 && blueCount == 1)
return "获得10000000奖金!";
else
return "没有该奖项!";
//对中奖次数进行简单的逻辑判断,便可以进行奖金的确定。
}
以上便可以实现双色球彩票系统的具体流程,完整代码如下:
package com.wxy.demo1;
import java.util.Scanner;
import java.util.Random;
public class 双色球系统 {
static Random r = new Random();
static Scanner sc = new Scanner(System.in);
static int redCount = 0,blueCount = 0;
public static void main(String[] args) {
int[]winningNum = new int[7];
int[]userNum = new int[7];
winningNum = Create();
userNum = userNum();
System.out.println(ifWin(winningNum,userNum));
System.out.println(judgeBonus());
}
public static int[] Create(){
int[]arr = new int[7];
//以下为生成红色球的中奖号码
for (int i = 0; i < arr.length-1; ) {
int redNum = r.nextInt(33)+1;
if(ifExist(arr,redNum)){
continue;
}
else {
arr[i] = redNum;
i++;
}
}
//以下为生成蓝色球的中奖号码
int blueNum = r.nextInt(16)+1;
arr[arr.length-1] = blueNum;
return arr;
}
public static boolean ifExist(int[]arr,int ra){
for (int i = 0; i < arr.length; i++) {
if(arr[i] == ra){
return true;
}
}
return false;
}
public static int[] userNum(){
int[]arr = new int[7];
System.out.println("请输入你的中奖号码!");
for (int i = 0; i < arr.length; ) {
if(i<arr.length-1){
System.out.println("您现在正在输入第"+(i+1)+"个红色球");
int rednum = sc.nextInt();
if(rednum>0 && rednum<34){
if(ifExist(arr,rednum)){
System.out.println("您输入的号码已经存在,请重新输入!");
}
else{
arr[i] = rednum;
i++;
}
}
else
System.out.println("您输入的第"+(i+1)+"个红球超过了范围");
}
else {
System.out.println("您现在输入的是蓝球的号码");
int blueNum = sc.nextInt();
if(blueNum>0 && blueNum<17){
arr[i] = blueNum;
i++;
}
else
System.out.println("你输入的超过了蓝球的范围!");
}
}
return arr;
}
public static String ifWin(int[] winingNum,int[] userNum){
for (int i = 0; i < userNum.length; i++) {
if(i<userNum.length-1){
if(ifExist(winingNum,userNum[i])){
redCount++;
}
}
else {
if(userNum[userNum.length-1] == winingNum[winingNum.length-1])
blueCount++;
}
}
return "此次中奖结果为\t红球:"+redCount+"个,"+"蓝球:"+blueCount+"个";
}
public static String judgeBonus(){
if(redCount == 0 && blueCount == 1 || redCount == 1 && blueCount == 1 || redCount == 2 && blueCount == 1 )
return "获得5元奖金!";
else if(redCount == 3 && blueCount == 1 || redCount == 4 && blueCount == 0)
return "获得10元奖金!";
else if(redCount == 4 && blueCount == 1 || redCount == 5 && blueCount == 0)
return "获得200元奖金!";
else if(redCount == 5 && blueCount == 1)
return "获得3000奖金!";
else if(redCount == 6 && blueCount == 0)
return "获得5000000奖金!";
else if(redCount == 6 && blueCount == 1)
return "获得10000000奖金!";
else
return "没有该奖项!";
}
}
实现效果图: