黑马程序员技术交流社区

标题: 这几天无意中看到坛子里一个关于双色球的问题!自己写了个!欢迎围观 [打印本页]

作者: 聂益飞    时间: 2013-4-20 03:32
标题: 这几天无意中看到坛子里一个关于双色球的问题!自己写了个!欢迎围观
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.Set;
  7. import java.util.TreeMap;
  8. import java.util.TreeSet;
  9. /*
  10. *         要求1:首先写一道程序,可以随机输出一注双色球的数。(这个我会写!)
  11.         要求2:让这道程序运行5000次,选出出现概率最大的7个数。
  12.         (这个我真心不会了!)求高手为之解答一下~(尽量用循环和数组的方法来解决!)
  13. *
  14. */
  15. public class Double
  16. {

  17.         public static void main(String[] args)
  18.         {
  19.                 select();
  20.         }

  21.         public static void select()
  22.         {
  23.                 Set<Integer> set = new TreeSet<Integer>();
  24.                 //String s = "";
  25.                 int key = 1, value = 0,blueKey = 1
  26.                                 ,blueValue = 0,blueBall = 0,dafo = 0;
  27.                 TreeMap<Integer, Integer> tm = new TreeMap<Integer, Integer>();
  28.                 TreeMap<Integer, Integer> tr = new TreeMap<Integer, Integer>();
  29.                 //TreeMap<Integer, Integer> td = new TreeMap<Integer, Integer>();
  30.                 while(key<34)
  31.                 {
  32.                         tm.put(key, value);
  33.                         key++;
  34.                 }
  35.                 while (blueKey<17)
  36.                 {
  37.                         tr.put(blueKey, blueValue);
  38.                         blueKey++;
  39.                 }
  40.                 Set<Integer> z = tm.keySet();
  41.                 Set<Integer> blueSet = tr.keySet();
  42.         while (dafo<5000)
  43.         {
  44.                 while (set.size() <= 5)
  45.                 {
  46.                         set.add((int) (Math.random() * 33 + 1));
  47.                 }
  48.                 for (Integer i : set)
  49.                 {
  50.                        
  51.                         for (Integer  x: z)
  52.                         {
  53.                                 if (i==x)
  54.                                 {
  55.                                         value = tm.get(x);
  56.                                         value++;
  57.                                         tm.put(x, value);
  58.                                 }
  59.                                 //System.out.println(x);
  60.                         }
  61.                         //s = s+i+",";
  62.                 }
  63.                 set.clear();
  64.        
  65.                 //s = s.substring(0,s.length()-1);
  66.                 blueBall = (int) (Math.random() * 16 + 1);
  67.                
  68.                 for (Integer  blueKey1: blueSet)
  69.                 {
  70.                         if (blueBall==blueKey1)
  71.                         {
  72.                                 blueValue = tr.get(blueKey1);
  73.                                 blueValue++;
  74.                                 tr.put(blueKey1, blueValue);
  75.                         }
  76.                 }
  77.                 dafo++;
  78.                 //s = "红球:"+s+"蓝球:"+blueBall;
  79.                 //System.out.println(s);       
  80.                 }
  81.         List<Map.Entry<Integer, Integer>> infoIds =
  82.                      new ArrayList<Map.Entry<Integer, Integer>>(tm.entrySet());
  83.         Collections.sort(infoIds, new Comparator<Map.Entry<Integer, Integer>>() {   
  84.              public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {      
  85.                  return (o2.getValue() - o1.getValue());
  86.                 // return (o1.getKey()).toString().compareTo(o2.getKey());
  87.              }
  88.          });
  89.         for (int i = 0; i < 6; i++) {
  90.              String id = infoIds.get(i).toString();
  91.              System.out.println("红球出现最多次数:"+id+"次");
  92.          }
  93.         List<Map.Entry<Integer, Integer>> infoIds1 =
  94.                      new ArrayList<Map.Entry<Integer, Integer>>(tr.entrySet());
  95.         Collections.sort(infoIds1, new Comparator<Map.Entry<Integer, Integer>>() {   
  96.              public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {      
  97.                  return (o2.getValue() - o1.getValue());
  98.                 // return (o1.getKey()).toString().compareTo(o2.getKey());
  99.              }
  100.          });
  101.         for (int i = 0; i < 1; i++) {
  102.              String id = infoIds1.get(i).toString();
  103.              System.out.print("蓝球出现最多次数:"+id+"次");
  104.          }
  105.         Set<Integer> u = tm.keySet();
  106.         for (Integer x : u)
  107.         {
  108.                 int t = tm.get(x);
  109.                 //System.out.println(x+"....."+t);
  110.         }
  111.         Set<Integer> r = tr.keySet();
  112.         for (Integer x : r)
  113.         {
  114.                 int t = tr.get(x);
  115.                 //System.out.println(x+"....."+t);
  116.         }
  117.         }
  118. }
复制代码
写这些代码学到很多东西!虽然不太符合题意!!但是我的结果比较满意!欢迎讨论!!
作者: 聂益飞    时间: 2013-4-20 03:35
精华部分是map集合居然可以通过值做比较进行排序!!我收益良多!!!后面有部分代码没有意义!但是代表当时的一些思路!所以没删!不懂可以问我!以前只知道可以键排序
作者: 曹睿翔    时间: 2013-4-20 07:08
学有所得,恭喜!
Collections中的sort(List<T> list, Comparator<? super T> c)方法,传入比较器,覆盖compare方法,利用Map.entry的映射关系可以实现对Map集合的value的排序。
作者: 黄玉昆    时间: 2013-4-20 07:34
建议楼主把适当的注释加上,可以一下子就看出来每个功能的用处。自己日后在看的时候,也能快速知道当初的思路




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