不同级别(JAVA)中更大的扑克牌价值

时间:2018-04-11 08:37:27

标签: java playing-cards

我正在尝试比较两个卡片对象并获得最大的一个。 该程序由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类调用时无法使比较方法有效。

3 个答案:

答案 0 :(得分: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;
}

答案 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.Comparablejava.util.Comparator用于比较Java中的对象的标准方法,这两种方法允许具有相同的结果,以防两张卡具有相同的值。