黑马程序员技术交流社区

标题: 模拟双色球 [打印本页]

作者: 彭卫红    时间: 2014-8-30 23:07
标题: 模拟双色球
  1. package Chapter08.Loans;

  2. import java.util.Vector;

  3. //购买双色球的人
  4. public class Buyer {
  5.         Vector v = new Vector();
  6.         static int n = 0;                // 一个中间变量
  7.         int order = 0;                // 购彩人的编号
  8.         public Buyer() {                // 利用该类的构造方法为编号赋值
  9.                 n++;
  10.                 order = n;
  11.         }
  12.         void buyLoans() {        // 购买彩票
  13.                 while (true) {
  14.                         Loans loa = new Loans();                        // 购买一次就创建一次Loans对象
  15.                         loa.getLoans();                                        // 调用Loans类中的getLoans方法
  16.                         v.add(loa);                                        // 将Loans对象加到Vector中
  17.                         System.out.println("您是否继续购买彩票?[0:退出]");
  18.                         int cmd = ChooseNumbers. getInt ();// 调用ChooseNumbers的scanInt方法
  19.                         if (cmd == 0)                                        // 结束while循环
  20.                                 break;
  21.                 }
  22.                 System.out.println("祝您好运,欢迎您下次再来!");
  23.         }
  24.         void print() {
  25.                 for (int i = 0; i < v.size(); i++) {
  26.                         Loans temp = (Loans) v.get(i);
  27.                         temp.print();
  28.                 }
  29.         }
  30. }


  31. package Chapter08.Loans;

  32. import java.io.BufferedReader;
  33. import java.io.InputStreamReader;

  34. //选取号码
  35. public class ChooseNumbers {
  36.         public static String entry() {
  37.                 String str = "";
  38.                 try {
  39.                         BufferedReader buf = new BufferedReader(new InputStreamReader(
  40.                                         System.in));// 创建BufferedReader缓存字符输入流
  41.                         str = buf.readLine();// 从键盘上读取一行数据
  42.                 } catch (Exception e) {
  43.                 }
  44.                 return str;
  45.         }
  46.         public static int getInt()// 从键盘上录入一个整型数据
  47.         {
  48.                 int temp = 0;
  49.                 while (true) {
  50.                         try {
  51.                                 temp = Integer.parseInt(entry()); // 将字符串转换成int型
  52.                                 break;
  53.                         } catch (Exception e) {
  54.                                 System.out.println("请输入一个整数:" + e.getMessage());
  55.                         }
  56.                 }
  57.                 return temp;
  58.         }
  59. }


  60. package Chapter08.Loans;

  61. import java.util.StringTokenizer;

  62. //所购买的彩票号码
  63. public class Loans {
  64.         int buyer[] = new int[7];//创建一个int型数组,用于存放选好的7个双色球号码
  65.         int level = 0;//标志中奖的等级
  66.         int num = 0;//标志选好的单个号码
  67.         void getLoans() {//获取选好的七个号码
  68.                 System.out.println("请输入您购买的7个彩票号码,并以空格隔开:");
  69.                 StringTokenizer src = new StringTokenizer(ChooseNumbers.entry(), " ");//将字符串以空格的形工式分解开
  70.                 int i = 0;
  71.                 while (src.hasMoreTokens()) {
  72.                         num = Integer.parseInt(src.nextToken());
  73.                         if (i < 6) {//判断前6个号码是否符合红球的选号范围内
  74.                                 if (num < 0 || num > 33) {
  75.                                         System.out.println("红球号码录入有误,红球号码必须在1~33之间选取");
  76.                                         break;
  77.                                 }
  78.                         } else if (i == 6) {//判断最后一个号码是否符合蓝球的选号范围内
  79.                                 if (num < 0 || num > 16) {
  80.                                         System.out.println("蓝球号码录入有误,蓝球号码必须在1~16之间选取");
  81.                                         break;
  82.                                 }
  83.                         }
  84.                         buyer[i] = num;
  85.                         i++;
  86.                 }
  87.         }
  88.         void print() {
  89.                 for (int i = 0; i < 7; i++) {
  90.                         System.out.print(buyer[i] + " ");
  91.                 }
  92.                 System.out.println();
  93.         }
  94. }



  95. package Chapter08.Loans;

  96. import java.util.Vector;

  97. //彩票投注站也就是售彩票的地方
  98. public class Lottery {
  99.         Vector v = new Vector();
  100.         int winnum[] = new int[7];//定义一个int型数组用来存储中奖的号码
  101.         void sellLoans()// 卖彩票给彩民
  102.         {
  103.                 while (true) {
  104.                         Buyer cm = new Buyer();
  105.                         cm.buyLoans();
  106.                         v.add(cm);
  107.                         System.out.println("是否还有彩民需要购买?[0:退出]");
  108.                         int cmd = ChooseNumbers.getInt();
  109.                         if (cmd == 0)
  110.                                 break;
  111.                 }
  112.         }
  113.         void showLoans()// 公布中奖号码
  114.         {
  115.                 System.out.println("公布本期的中奖号码为:");
  116.                 for (int i = 0; i < winnum.length; i++) {
  117.                         winnum[i] = (int) (Math.random() * 35 + 1);
  118.                         for (int j = 0; j < i; j++) {
  119.                                 if (winnum[i] == winnum[j])
  120.                                         i--;
  121.                         }
  122.                         System.out.print(winnum[i] + " ");
  123.                 }
  124.                 System.out.println();
  125.         }
  126.         void totalInfo()// 统计中奖情况
  127.         {
  128.                 for (int i = 0; i < v.size(); i++) {
  129.                         Buyer cm = (Buyer) v.get(i);
  130.                         totalBuyer(cm);
  131.                 }
  132.         }
  133.         void totalBuyer(Buyer cm)// 统计一个彩民的中奖情况
  134.         {
  135.                 for (int i = 0; i < cm.v.size(); i++) {
  136.                         Loans loa = (Loans) cm.v.get(i);
  137.                         totalLoans(loa);
  138.                 }
  139.         }
  140.         void totalLoans(Loans loa)// 统计一批彩票的中奖情况
  141.         {
  142.                 for (int i = 0; i < 7; i++)
  143.                         for (int j = 0; j < 7; j++)
  144.                                 if (loa.buyer[i] == winnum[j]) {
  145.                                         loa.level++;
  146.                                         break;
  147.                                 }
  148.         }
  149.         void prize()// 兑换奖品
  150.         {
  151.                 for (int i = 0; i < v.size(); i++) {
  152.                         Buyer cm = (Buyer) v.get(i);
  153.                         winner(cm);
  154.                 }
  155.         }
  156.         void winner(Buyer cm)// 中奖的人
  157.         {
  158.                 System.out.println("彩民[" + cm.order + "]:");
  159.                 for (int i = 0; i < cm.v.size(); i++) {
  160.                         Loans loa = (Loans) cm.v.get(i);
  161.                         prizeMoney(loa);
  162.                 }
  163.         }
  164.         void prizeMoney(Loans loa)// 中奖的金额
  165.         {
  166.                 switch (loa.level) {
  167.                 case 6:
  168.                         System.out.println("恭喜您中了一等奖,中奖金额为500万元!");
  169.                         break;
  170.                 case 5:
  171.                         System.out.println("恭喜您中了二等奖,单注奖金额为63万元!");
  172.                         break;
  173.                 case 4:
  174.                         System.out.println("恭喜您中了三等奖,单注奖金额为3000元!");
  175.                         break;
  176.                 case 3:
  177.                         System.out.println("恭喜您中了四等奖,单注奖金额为200元!");
  178.                         break;
  179.                 case 2:
  180.                         System.out.println("恭喜您中了五等奖,单注奖金额为10元!");
  181.                         break;
  182.                 case 1:
  183.                         System.out.println("恭喜您中了六等奖,单注奖金额为5元!");
  184.                         break;
  185.                 default:
  186.                         System.out.println("谢谢您的参与,祝您下次好运!");
  187.                         break;
  188.                 }
  189.         }
  190. }


  191. package Chapter08.Loans;
  192. //测试类
  193. public class TestCase {
  194.         public static void main(String[] args) {
  195.                 Lottery lot = new Lottery();        // 创建一个Lottery类
  196.                 lot.sellLoans();                        // 调用Lottery类的sellLoans方法,其主要作用是将彩票卖给购彩的人们
  197.                 lot.showLoans();                // 调用Lottery类的showLoans方法,其主要作用公布该期的中奖号码
  198.                 lot.totalInfo();                        // 调用Lottery类的totalInfo方法,其主要作用是统计中奖的情况
  199.                 lot.prize();                                // 调用Lottery类的prize方法,其主要作用是中奖人到彩票投注站去兑换奖金
  200.         }
  201. }
复制代码

作者: 彭卫红    时间: 2014-8-30 23:08
代码要多敲,多练。思路要多想,多看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2