让我说我有一串洗过的卡片
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
答案 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));