自定义排序一副纸牌

时间:2019-04-17 18:38:47

标签: java arrays

让我说我有一串洗过的卡片

HK  C2  C8  CQ  S3  SJ  S4  D2  HQ  H9  HT  DT  ST  
H2  H3  SA  CA  HJ  S9  S6  S8  H8  H6  C7  D7  CJ  
H7  C9  DQ  DA  C5  D4  D6  D9  SK  DJ  CK  DK  SQ  
D5  HA  D3  S2  H4  S5  C3  D8  CT  S7  C6  C4  H5

我如何自定义将它们分类为

S2  S3  S4  S5  S6  S7  S8  S9  ST  SJ  SQ  SK  SA  
H2  H3  H4  H5  H6  H7  H8  H9  HT  HJ  HQ  HK  HA  
D2  D3  D4  D5  D6  D7  D8  D9  DT  DJ  DQ  DK  DA  
C2  C3  C4  C5  C6  C7  C8  C9  CT  CJ  CQ  CK  CA 

当前我已经尝试过Arrays.sort(stringArray)方法,但最终得到

C2  C3  C4  C5  C6  C7  C8  C9  CA  CJ  CK  CQ  CT  
D2  D3  D4  D5  D6  D7  D8  D9  DA  DJ  DK  DQ  DT  
H2  H3  H4  H5  H6  H7  H8  H9  HA  HJ  HK  HQ  HT  
S2  S3  S4  S5  S6  S7  S8  S9  SA  SJ  SK  SQ  ST 

在那之后,我尝试做一个插入方法,但最终还是

ST  SQ  SK  SJ  SA  S9  S8  S7  S6  S5  S4  S3  S2  
HT  HQ  HK  HJ  HA  H9  H8  H7  H6  H5  H4  H3  H2  
DT  DQ  DK  DJ  DA  D9  D8  D7  D6  D5  D4  D3  D2  
C2  C3  C4  C5  C6  C7  C8  C9  CA  CJ  CK  CQ  CT 

这是我到目前为止所做的

 Arrays.sort(stringArray); 

        for (j = 13; j < stringArray.length; j++) { 
          String  key = stringArray[j];
            i = j - 1;
            while (i >= 0) {
              if (key.compareTo(stringArray[i]) < 0) {
                break;
              }
              stringArray[i + 1] = stringArray[i];
              i--;
            }
            stringArray[i + 1] = key;
          }

编辑:所以我必须按以下顺序对这些元素进行排序:S,H,D,C 另外,必须根据卡的等级。因此,

  

S2,S3,S4,S5,S6,S7,S8,S9,ST,SJ,SQ,SK,SA

2 个答案:

答案 0 :(得分:1)

Java Collections有一个sort()方法,该方法可以同时对要排序的集合和比较器进行排序。比较器是带有方法的类,该方法接受要排序的两种类型的项,并根据其所需的任何规则返回一个指示符,指示符是第一个小于,等于还是大于另一个。

将项目放入Java集合中,编写比较器,然后让Java处理排序算法。

答案 1 :(得分:0)

另一种方法是根据需要将每张卡表示为一个字符串和三个数字或其他值。

class Card {
   String name;  // eg. AS, TD, 5H
   int rank;  // 0 - 12
   int suit;  // 0 - 3
   int value; // card rank 0 - 51.  rank and suit could be set using mod and div.

   public int getCardValue() {
       return value;
    }

    // other getters added here
    // ...
    public String toString() {
          return  name;
    }


}

然后,您可以使用自然顺序(或其他某种顺序)对值进行排序。 假设它们在卡片列表类型的卡片组中。

Collection.sort(deck, Comparator.comparing(Card::getCardValue));