java - 不同类别中更大的纸牌值(value)(JAVA)

标签 java playing-cards

我正在尝试比较两个卡片对象并获得最大的一个。 该程序由 2 个类组成,但我不知道如何在 2 张卡片之间获得最大值(value)。

Class 1 包含这段代码:

Pelikortti kortti1 = new Pelikortti("risti",7);
Pelikortti kortti2 = new Pelikortti("ruutu",8);
System.out.println(suurempi(kortti1,kortti2)); //expected: ruutu 8

这一行应该打印 ruutu 8 因为它是具有最大值(value)的卡片。 “suurempi”在我的语言中是“更大”的意思。

到目前为止,第 2 类看起来像这样:

public class Pelikortti {

    private String maa1;
    private int arvo1;


    public Pelikortti(String maa, int arvo){
        if(parametritOK(maa,arvo)){
            this.maa1 = maa;
            this.arvo1 = arvo;
        }else{
            this.maa1 = "?";
            this.arvo1 = -1;
        }
    }

    public Pelikortti() {
        this.maa1 = "?";
        this.arvo1 = -1;
    }

    private static boolean parametritOK(String maa, int arvo){
        return (maa.equals("risti")||maa.equals("ruutu")||
                maa.equals("pata")||maa.equals("hertta")) 
                && arvo > 1 && arvo < 15;
    }

    public void setKortti(String maa, int arvo){
        if(parametritOK(maa,arvo)){
            this.maa1 = maa;
            this.arvo1 = arvo;
        }else{
            this.maa1 = "?";
            this.arvo1 = -1;
        }
    }

    public String getMaa() {
        return maa1;
    }

    public int getArvo() {
        return arvo1;
    }

    public int suurempi(Pelikortti kortti1, Pelikortti kortti2){
        if(kortti1>kortti2){
            return kortti1;
        }
        return kortti2;
    }

    public String toString(){
        return(this.maa1 + " " + this.arvo1);
    }
}

第二个类也有很多其他方法,因为它是另一个作业的一部分,但这里的问题是当从第 1 类调用时我无法使比较方法起作用。

最佳答案

你要比较的是卡值。并且该值不是卡片对象本身,而是包含该值的属性:arvo1

因此您需要比较每个对象的正确属性:kortti1.arvo1kortti2.arvo2

注意这个属性是私有(private)的,你不能直接从另一个实例访问它,所以你需要使用 getter getArvo()

此外,suurempi 不是静态方法,它需要从类实例中调用。因此它只需要一个参数 (kortti2),因为 kortti1 将是调用该方法的实例。

您还需要将方法返回类型更改为 Pelikortti,因为您想要获取卡片对象而不仅仅是它的值(感谢 eltabo 的编辑)

public Pelikortti suurempi(Pelikortti kortti2){
    if(this.arvo1>kortti2.getArvo()){
        return this;
    }
    return kortti2;
}

方法调用:

System.out.println(kortti1.suurempi(kortti2));

编辑:

如果对 suurempi 的调用必须来自另一个类(我们称它为 ClassA)并遵循以下语法:

System.out.println(suurempi(kortti1,kortti2));

这意味着 suurempi 是在 ClassA 中定义的,而不是在 Pelikortti 中定义的,您需要移动您的代码。

除了您不使用 this 而是使用正确的参数外,它非常相似。

public Pelikortti suurempi(Pelikortti kortti1, Pelikortti kortti2){
    if(kortti1.getArvo()>kortti2.getArvo()){
        return kortti1;
    }
    return kortti2;
}

关于java - 不同类别中更大的纸牌值(value)(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770355/

相关文章:

javascript - jqGrid EditRow ErroFunc 回调用法

java - 匿名内部类——集合排序

clojure - Clojure 中的重复向量

ruby - 初始化一副纸牌的更好方法

javascript - 如何从一副牌中随机选择一张牌并且不再选择它?

java - JsonObject 到 Java 对象

java - 从匿名类调用新定义的方法

html - HTML 中的特殊字符

java - 如何调试 Java 中的 ClassLoader 找不到文件