我正在尝试比较两个卡片对象并获得最大的一个。 该程序由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类调用时无法使比较方法有效。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
那是因为您正在比较卡片,而不是卡片值
public static Pelikortti suurempi(Pelikortti kortti1, Pelikortti kortti2){
if(kortti1.getArvo()>kortti2.getArvo()){
return kortti1;
}
return kortti2;
}
然后你可以使用这样的函数:
System.out.println(Pelikortti.suurempi(kortti1,kortti2));
答案 2 :(得分:0)
问题是你不能像整数那样直接比较对象,这就是你在int suurempi(Pelikortti kortti1, Pelikortti kortti2)
您的目标是让System.out.println(suurempi(kortti1,kortti2));
从第1课打印出ruutu 8
。
首先,方法int suurempi(Pelikortti kortti1, Pelikortti kortti2)
在Pelikortti
上定义,并且在不使用Pelikortti
对象的情况下从类1进行调用,因此不会使用该方法。此外,它返回一个整数,而不是更大的Pelikortti
。
然后,为了简单起见,让我们使这个suurempi
方法返回一个Pelikortti
对象,以便System.out.println
通过获取卡对象String
打印出最大的卡片。通过toString()
实例方法表示,覆盖java.lang.Object
。
我们需要在Class 1中定义如下方法:
public Pelikortti suurempi(Pelikortti kortti1, Pelikortti kortti2) {
return kortti1.getArvo() >= kortti2.getArvo() ? kortti1 : kortti2;
}
这假设您从类1的实例方法调用suurempi
,如果您是从public void main(String[] args)
这样的静态方法调用它,那么您需要使suurempi
静态太
如果卡具有相同的值(例如Pelikortti
的工作方式),上面建议的比较实现将返回第一个Math.max()
,但您可以查看接口java.lang.Comparable
和java.util.Comparator
用于比较Java中的对象的标准方法,这两种方法允许具有相同的结果,以防两张卡具有相同的值。