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

第1类包含以下代码:

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


该行应该打印ruutu 8,因为它是最大的卡片。 “ 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

请注意,此属性是私有的,您不会直接从另一个实例访问它,因此您将需要使用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;
}

10-06 09:53