0710 第七次作业(双色球)

双色球

需求:

双色球投注区分为红色球号码区和蓝色球号码区,
红色球号码区由1-33共33个号码组成,蓝色球号码区由1-16共16个号码组成。
投注时选择6个红球号码和1个蓝球号码组成一注进行单式投注,每注金额2元。
一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同,即中奖;
五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同,即中奖;
六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。
显示中奖结果的同时显示您一共下注人民币??元,累计中奖人民币??元

  1 /*
  2 双色球投注区分为红色球号码区和蓝色球号码区,
  3 红色球号码区由1-33共33个号码组成,蓝色球号码区由1-16共16个号码组成。
  4 投注时选择6个红球号码和1个蓝球号码组成一注进行单式投注,每注金额2元。
  5 
  6 一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
  7 二等奖:投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
  8 三等奖:投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
  9 四等奖:投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同,即中奖;
 10 五等奖:投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同,即中奖;
 11 六等奖:投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。
 12 显示中奖结果的同时显示您一共下注人民币??元,累计中奖人民币??元
 13 */
 14 import java.util.Scanner;
 15 public class Lottery {
 16     public static void main(String[] args) {
 17         //以二维数组的形式定义已购彩票变量
 18         int[][] myLottery = new int[1000][7];
 19 
 20         //实现主菜单循环
 21         do {
 22             //输出系统界面
 23             System.out.println("============欢迎进入双色球彩票系统============");
 24             System.out.println("\t\t1.购买彩票");
 25             System.out.println("\t\t2.查看开奖");
 26             System.out.println("\t\t3.退出系统");
 27             System.out.println("++++++++++++++++++++++++++++++++++++++++++++++");
 28             
 29             //获取菜单选择
 30             Scanner sc = new Scanner(System.in);
 31             int menu = sc.nextInt();
 32             
 33             //进入具体功能
 34             switch (menu) {
 35                 case 1:
 36                     buyLottery(myLottery);
 37                 break;
 38                 case 2:
 39                     winLottery(myLottery);
 40                 break;
 41                 case 3:
 42                     return;
 43                 default:
 44                     System.out.println("输入有误");
 45                 break;
 46             }
 47         }while (true);
 48     }
 49 
 50     //彩票购买流程
 51     public static int[][] buyLottery(int[][] arr){
 52         //输出购买选择
 53         Scanner sc = new Scanner(System.in);
 54         System.out.println("+++++++++++++++++++++++++++++++");
 55         System.out.println("\t请选择购买方式:");
 56         System.out.println("\t1.自选");
 57         System.out.println("\t2.机选");
 58         System.out.println("+++++++++++++++++++++++++++++++");
 59         //获取选择
 60         int a = sc.nextInt();
 61         switch (a) {
 62             //自选号码购买
 63             case 1:
 64                 //将新购买的彩票添加至二维数组最左侧的空位中
 65                 int h = 0;
 66                 for (h = 0;h <= arr.length ;h++) {
 67                     int[] tempLottery = new int[7];
 68                     if (arr[h][0] == 0) {
 69                         arr[h] = buyOneLottery(tempLottery);
 70                     }
 71                     //实现循环购买
 72                     System.out.println("是否继续购买?(Y/N)");
 73                     char b = sc.next().charAt(0);
 74                     while (b != 'y' && b != 'Y' &&b != 'n' &&b != 'N'){
 75                         System.out.println("输入的信息有误,请重新输入");
 76                         System.out.println("是否继续购买?(Y/N)");
 77                         b = sc.next().charAt(0);
 78                     }
 79                     if (b == 'y' || b == 'Y'){
 80                         continue;
 81                     }else {
 82                         break;
 83                     }
 84                 }
 85                 
 86                 //输出购买结果
 87                 int num1 = h + 1;
 88                 int money1 = (h + 1) * 2;
 89                 System.out.println("您一共购买了" + num1 +"注彩票, 共花费" + money1 + "元, 彩票号码是:");
 90                 printAllLottery(arr);
 91                 System.out.println();
 92                 backToMenu('a');
 93             break;
 94             //机选号码购买
 95             case 2:
 96                 System.out.println("请输入您想购买的彩票数量(最多100注):");
 97                 //获取想要购买的机选彩票数量
 98                 int numberOfLottery = sc.nextInt();
 99                 //获取已经购买的彩票数量
100                 int numberOfLotteryBought = 0;
101                 while (arr[numberOfLotteryBought][0] != 0) {
102                     numberOfLotteryBought++;
103                 }
104                 //添加机选彩票到已买彩票
105                 for (int m = numberOfLotteryBought;m < numberOfLotteryBought + numberOfLottery ;m++) {
106                     int[] tempLottery = new int[7];
107                     arr[m] = getRandomLottery(tempLottery);
108                 }
109                 //打印所有已购彩票
110                 int num2 = numberOfLotteryBought + numberOfLottery;
111                 int money2 = num2 * 2;
112                 System.out.println("购买成功!您一共购买了" + num2 +"注彩票, 共花费" + money2 + "元, 彩票号码是");
113                 printAllLottery(arr);
114                 backToMenu('a');
115             break;
116             default:
117                 System.out.println("输入有误");
118             break;
119         }
120         return arr;
121     }
122 
123     //自选购买单注彩票
124     public static int[] buyOneLottery(int[] arr) {
125         //获取红球号码
126         Scanner sc = new Scanner(System.in);
127         for (int i = 1;i <= 6 ;i++) {
128             System.out.println("请输入您要购买的第" + i + "个红球的号码(1~33)");
129             int j = sc.nextInt();
130             
131             if (j >= 1 && j <= 33) {
132                 arr[i - 1] = j;
133             }else {
134                 System.out.println("您输入的号码有误,请重新输入");
135                 i--;
136             }
137             
138             //确保红球数字不重复
139             for (int k = i - 1 ;k >= 1 ;k-- ) {
140                 if (arr[i - 1] == arr[k - 1]) {
141                 System.out.println("这个号码已经选择过了,请重新输入");
142                 i--;
143                 }
144             }
145         }
146         //获取蓝球号码
147         System.out.println("请输入您要购买的蓝球号码(1~16)");
148         int b = sc.nextInt();
149         while (b > 16 || b < 0) {
150             System.out.println("您输入的号码有误,请重新输入");
151             b = sc.nextInt();
152         }
153         arr[6] = b;
154         //输出结果
155         System.out.println("购买成功!您购买的双色球号码是:");
156         printOneLottery(arr);
157         return arr;
158     }
159 
160     //印出单个彩票
161     public static void printOneLottery(int[] arr){
162         for (int i = 0;i < arr.length ;i++) {
163             System.out.print(arr[i] + "\t");
164         }
165         System.out.println();
166     }
167 
168     //印出所有已买彩票
169     public static void printAllLottery(int[][] arr){
170         for (int i = 0;i < arr.length ;i++) {
171             if(arr[i][0] != 0) {
172                 for (int j = 0;j < arr[i].length ;j++) {
173                     System.out.print(arr[i][j] + "\t");
174                 }
175                 System.out.println();
176             }else {
177                 return;
178             }
179         }
180     }
181 
182     //获取随机彩票
183     public static int[] getRandomLottery(int[] arr){
184         for (int i = 0;i < 6 ;i++) {
185             int red = (int)(Math.random() * 33 + 1);
186             arr[i] = red;
187         }
188         arr[6] = (int)(Math.random() * 16 + 1);
189         return arr;
190     }
191 
192     //查看开奖
193     public static int[][] winLottery(int[][] arr){
194         //判断是否已购彩票,如否则返回
195         if (arr[0][0] == 0) {
196             System.out.println("您尚未购买任何彩票");
197             System.out.println();
198             System.out.println();
199             backToMenu('a');
200             return arr;
201         }
202         //获取并输出中奖号码
203         int[] winner = new int[7];
204         getRandomLottery(winner);
205         System.out.println("===================================================");
206         System.out.println("\t\t本期的中奖号码是:");
207         printOneLottery(winner);
208         System.out.println("===================================================");
209         //获取购买的彩票数目
210         int num = 0;
211         while (arr[num][0] != 0) {
212             num++;
213         }
214 
215         //建立一个数组统计中奖情况 {1 ,6 ,0 ,0 ,3...}数字代表该位置的彩票中了几等奖
216         int[] result1 = new int[num];
217         //再建立一个数组统计各奖项各自中了多少注
218         int[] result2 = new int[7];
219         //调取第i张彩票
220         for (int i = 0;i < num ;i++ ) {
221             //建立第i张彩票中红球匹配数变量
222             int red = 0;
223             //调取第i张彩票中的第j个红球号码
224             for (int j = 0;j < 6;j++ ) {
225                 //与中奖号码中的六个红球号码一一对比
226                 for (int k = 0;k < 6 ;k++ ) {
227                     if (arr[i][j] == winner[k]) {
228                         red++;
229                     }
230                 }
231             }
232 
233             //判断第i张彩票中了几等奖,并存入result1中
234             if (red == 6 && arr[i][6] == winner[6]) {
235                 result1[i] = 1;
236             }else if (red == 6 && arr[i][6] != winner[6]) {
237                 result1[i] = 2;
238             }else if (red == 5 && arr[i][6] == winner[6]) {
239                 result1[i] = 3;
240             }else if ((red == 5 && arr[i][6] != winner[6]) || (red == 4 && arr[i][6] == winner[6])) {
241                 result1[i] = 4;
242             }else if ((red == 4 && arr[i][6] != winner[6]) || (red == 3 && arr[i][6] == winner[6])) {
243                 result1[i] = 5;
244             }else if (arr[i][6] == winner[6]) {
245                 result1[i] = 6;
246             }else {
247                 result1[i] = 0;
248             }
249         }
250 
251         //统计n等奖有多少个
252         for (int n = 0;n < 7 ;n++ ) {
253             for (int p = 0;p < num ;p++) {
254                 if (result1[p] == n) {
255                     result2[n]++;
256                 }
257             }
258         }
259 
260         //输出中奖结果
261         //若全未中奖,则输出:
262         if (result2[0] == num) {
263             System.out.println("真遗憾,本次购买的" + num + "张彩票均未中奖,欢迎再次光临");
264             System.out.println("===================================================");
265         }else {
266             for (int q = 1;q < 7 ;q++ ) {
267                 if (result2[q] != 0) {
268                     System.out.println("恭喜!您中了" + result2[q] + "注" + q +"等奖,中奖彩票的号码是:");
269                     //找出中奖彩票并输出
270                     for (int r = 0;r < num ;r++ ) {
271                         //若第r张彩票中了q等奖,则印出第r张彩票的号码
272                         if (result1[r] == q) {
273                             printOneLottery(arr[r]);
274                         }
275                     }
276                 }
277             }
278             //输出未中奖结果
279             System.out.println("有" + result2[0] + "张彩票没有中奖");
280             //统计中奖金额
281             int sum = result2[1] * 5000000 + result2[2] * 1000000 + result2[3] * 3000 + result2[4] * 200 + result2[5] * 10 + result2[6] * 5;
282             System.out.println("===================================================");
283             System.out.println("本次购彩共计" + num +"注,花费" + num * 2 +"元,合计奖金" + sum + "元");
284             System.out.println("===================================================");
285         }
286         
287         //清空已购彩票记录
288         for (int s = 0;s < arr.length ;s++) {
289             for (int t = 0 ;t < arr[s].length ;t++) {
290                 arr[s][t] = 0;
291             }
292         }
293         backToMenu('a');
294         return arr;
295     }
296 
297     //返回主菜单方法
298     public static void backToMenu(char back){
299         do {
300             System.out.println("是否返回主菜单?(Y/N)");
301             Scanner sc = new Scanner(System.in);
302             back = sc.next().charAt(0);
303             if (back != 'y' && back != 'Y' && back != 'n' && back != 'N') {
304                 System.out.println("输入有误,请重新输入");
305             }else if (back == 'y' || back == 'Y') {
306                 return;
307             }else{
308                 System.out.println("留在这儿也没啥事儿");
309             }
310         }
311         while (true);
312     }
313 }

猜你喜欢

转载自www.cnblogs.com/chang4/p/9288751.html
今日推荐