我正在尝试比较两张纸牌对象并获得最大的一张。
该程序由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.arvo1
和kortti2.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;
}