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
相关产品推荐
相关产品推荐

