蠢怕什么先实现了, 慢慢再 refact

解决方案 »

  1.   

    可以加一个标记;例如:红桃是主 定义标记nflag = -1;
    先判断一下是否为主
      

  2.   

    忘了不少规则,权当抛砖引玉吧.
    public static int compare(Hand h1, Hand h2) {
       if(h1.isTractor() && h2.hsTractor()) 
          return compareTractor(h1,h2);
       else
           ...
           
    }public static int compareTractor(Hand h1, Hand h2) {
       if(h1.isTrump()) {
          if(h2.isTrump()) {
              if(h1.trackorLen() != h2.trackorLen())
                 return h1.trackorLen() - h2.trackorLen();
              return (h1.leastCard() - h2.leastCard());
          }
          return 1; // h2 is not trump
       }else {
          if(h2.isTrump()) {
             return 1;
             
          // neither is trump
          for(int i = 13; i > 1; i--) {
             if(h1.isTractor(i) && !h2.isTractor(i))
                return 1;
             if(!h1.isTractor(i) && h2.isTractor(i))
                return -1;
             if(h1.isTractor(i) && h2.isTractor(i))
                return h1.leastCard() - h2.leastCard();
          }
    }Class Hand {
       public int[] card;
       public int num; // 22,33,44---> 2  222,333,444--->3
       public int leastCard() {
          return card[0];
       }
       
       public int tractorLen() {
          return card.length;
       }
       
       public boolean isTractor(int i) {
          return num == i;
       {
    }
      

  3.   

    helpall() 老大,能稍微讲一下思路么?^_^
      

  4.   

    我也是这么考虑的,但是会遇到混合的情况,
    如一个家伙出2托+1对。另一个人出3托,就会出现一个拆分第二个人拖拉机的问题。
    光是把一手牌按拖拉机分类就挺烦的。我的card类的一个对象就是一张牌
    记录:花色,点数,大小(当决定什么是主,打几的时候,分配大小)。
    我可以通过两对牌的大小值之差为1,判断是一个拖拉几(在这之前还要先把一手牌中的对先挑出),越写越烦,写了n行,最后还发现写错了,郁闷
      

  5.   

    如一个家伙出2托+1对。另一个人出3托,就会出现一个拆分第二个人拖拉机的问题。
    用第一个家伙出的格式,递归判断第二家是否匹配
    语言描述如下
    方法:是否匹配
    参数:Hashtable,记录每个类型的牌有几个,牌型为key,个数为value
         Collection,欲匹配的牌
    实现:
         在Collection中找Hashtaqble中最复杂的排的个数,有的话取最大的与之匹配,没有返回
         调用自己,把比较过的牌和牌型去掉
         最后可以返回最复杂牌的最大牌的面值