You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将5张手牌按从高到低排序?如何拆分字符串数组为子数组?

扑克牌手从高到低排序实现

字符串拆分问题修正

你写的拆分逻辑有个基础错误:Java里String是不可变对象,split()方法不会修改原字符串,执行后会返回拆分好的新数组,你之前没有接收这个返回值,所以永远拿不到拆分后的牌面值和花色。
修正后的拆分写法:

String[] handDeck = {"Ace spades", "Five hearts", "Four spades", "King diamonds", "Queen diamonds"};
// 二维数组存解析后的牌,每个元素对应[牌面值, 花色]
String[][] parsedCards = new String[handDeck.length][2];
for (int i = 0; i < handDeck.length; i++) {
    // 按空格切分,接收返回的拆分结果
    String[] cardParts = handDeck[i].split(" ");
    parsedCards[i][0] = cardParts[0];
    parsedCards[i][1] = cardParts[1];
}

牌面排序实现思路

不要直接用字符串默认排序——字典序下首字母A的ASCII码比K小,直接排序会把Ace排到King后面,结果完全错误。
正确做法是先给每个牌面值绑定固定权重,按权重排序:
牌面权重对应规则(权重越高牌越大):

  • Ace → 14
  • King → 13
  • Queen → 12
  • Jack → 11
  • Ten → 10
  • 数字牌9到2权重依次为9到2

排序时直接比对两张牌对应的权重值,做降序排列即可,完整可运行参考代码:

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class PokerSorter {
    public static void main(String[] args) {
        String[] handDeck = {"Ace spades", "Five hearts", "Four spades", "King diamonds", "Queen diamonds"};
        
        // 初始化牌面权重映射
        Map<String, Integer> rankMap = new HashMap<>();
        rankMap.put("Two", 2);
        rankMap.put("Three", 3);
        rankMap.put("Four", 4);
        rankMap.put("Five", 5);
        rankMap.put("Six", 6);
        rankMap.put("Seven", 7);
        rankMap.put("Eight", 8);
        rankMap.put("Nine", 9);
        rankMap.put("Ten", 10);
        rankMap.put("Jack", 11);
        rankMap.put("Queen", 12);
        rankMap.put("King", 13);
        rankMap.put("Ace", 14);

        // 自定义比较器,按牌面权重降序排序
        Arrays.sort(handDeck, new Comparator<String>() {
            @Override
            public int compare(String c1, String c2) {
                int weight1 = rankMap.get(c1.split(" ")[0]);
                int weight2 = rankMap.get(c2.split(" ")[0]);
                // 降序:权重大的排前面
                return weight2 - weight1;
            }
        });

        // 输出排序结果
        for (String card : handDeck) {
            System.out.println(card);
        }
    }
}

运行输出顺序:
Ace spades
King diamonds
Queen diamonds
Five hearts
Four spades

如果后续需要追加同牌面下的花色排序规则,只要在两个牌权重相等的判断分支里,再加一层花色权重的比对逻辑即可。

内容的提问来源于stack exchange,提问作者hobbyiscoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:09:10