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

Java不同类中比较扑克牌大小问题求助

嘿,我来帮你搞定这个扑克牌比较的问题!你现在需要实现的核心是给Pelikortti类加上比较逻辑,然后写出能返回更大牌的suurempi方法。我给你分步骤讲清楚:

第一步:完善Pelikortti类

首先你的扑克牌类需要存花色和数值,还要提供获取这些属性的方法,以及方便打印的toString方法。代码如下:

public class Pelikortti {
    private String maa; // 比如"risti"、"ruutu"这类花色
    private int arvo;   // 牌的数值,比如7、8

    // 构造方法,初始化花色和数值
    public Pelikortti(String maa, int arvo) {
        this.maa = maa;
        this.arvo = arvo;
    }

    // 获取数值的方法,用于比较
    public int getArvo() {
        return arvo;
    }

    // 获取花色的方法,可选(如果需要数值相同时比较花色)
    public String getMaa() {
        return maa;
    }

    // 重写toString,让打印牌的时候直接输出"花色 数值"
    @Override
    public String toString() {
        return maa + " " + arvo;
    }
}

第二步:实现suurempi方法

这个方法可以写成静态方法,接收两个Pelikortti对象,先比较它们的数值——数值大的就是更大的牌;如果数值相同,你还可以自定义花色的优先级(比如按risti < ruutu < hertta < pata排序,这部分可选)。

方式一:直接写比较逻辑

public class KorttiApuri {
    // 返回更大的扑克牌
    public static Pelikortti suurempi(Pelikortti kortti1, Pelikortti kortti2) {
        // 先比数值,数值大的直接返回
        if (kortti1.getArvo() > kortti2.getArvo()) {
            return kortti1;
        } else if (kortti2.getArvo() > kortti1.getArvo()) {
            return kortti2;
        } else {
            // 数值相同的情况:自定义花色优先级,这里举个例子,你可以按需调整
            String[] jarjestys = {"risti", "ruutu", "hertta", "pata"};
            int idx1 = -1, idx2 = -1;
            for (int i = 0; i < jarjestys.length; i++) {
                if (jarjestys[i].equals(kortti1.getMaa())) idx1 = i;
                if (jarjestys[i].equals(kortti2.getMaa())) idx2 = i;
            }
            return idx1 > idx2 ? kortti1 : kortti2;
        }
    }

    // 测试你的例子
    public static void main(String[] args) {
        Pelikortti kortti1 = new Pelikortti("risti",7);
        Pelikortti kortti2 = new Pelikortti("ruutu",8);
        System.out.println(suurempi(kortti1,kortti2)); // 输出:ruutu 8,完全符合预期
    }
}

方式二:用Comparable接口(更规范的Java写法)

让Pelikortti实现Comparable接口,定义对象的自然排序规则,这样suurempi方法会更简洁:

public class Pelikortti implements Comparable<Pelikortti> {
    private String maa;
    private int arvo;

    public Pelikortti(String maa, int arvo) {
        this.maa = maa;
        this.arvo = arvo;
    }

    public int getArvo() { return arvo; }
    public String getMaa() { return maa; }

    @Override
    public String toString() {
        return maa + " " + arvo;
    }

    // 定义比较规则:先比数值,数值相同比花色
    @Override
    public int compareTo(Pelikortti toinenKortti) {
        // 先比较数值
        int arvoVertailu = Integer.compare(this.arvo, toinenKortti.arvo);
        if (arvoVertailu != 0) {
            return arvoVertailu;
        }
        // 数值相同,按自定义花色顺序比较
        String[] maaJarjestys = {"risti", "ruutu", "hertta", "pata"};
        int omaIndeksi = java.util.Arrays.asList(maaJarjestys).indexOf(this.maa);
        int toinenIndeksi = java.util.Arrays.asList(maaJarjestys).indexOf(toinenKortti.maa);
        return Integer.compare(omaIndeksi, toinenIndeksi);
    }
}

然后suurempi方法可以简化成:

public static Pelikortti suurempi(Pelikortti kortti1, Pelikortti kortti2) {
    return kortti1.compareTo(kortti2) > 0 ? kortti1 : kortti2;
}

这样两种方式都能实现你的需求,第一种更直白,第二种更符合Java面向对象的设计规范,你可以选适合自己的来用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:40:09