试图设定狗尾巴的长度,但由于某种原因它不起作用

时间:2014-01-13 19:53:22

标签: java methods set division

正如标题已经说明的那样,我正在编写一个应该创建狗的Java类。

代码是瑞典语,但不难理解。

我的问题在于“setSvanslängd”方法,它基本上意味着“setTailLength”。

该方法应该查看品种(ras),如果品种是税,它应该将尾长设置为3.7,但如果狗是不同的品种,它应该计算重量(vikt)x年龄( ålder)然后将值返回到变量“tailLength”(svanslängd)。

但是当我尝试创建三只狗时,它只会为tailLength返回0.0。

问题出在哪里或者是什么......?

提前谢谢!

这是到目前为止的代码:

public class Hund {

    private String namn;
    private int ålder;
    private int vikt;
    private String ras;
    private double svanslängd;


    public Hund(String namn , int ålder , int vikt, String ras) {
        this.namn = namn;
        this.ålder = ålder;
        this.vikt = vikt;
        this.ras = ras;
    }

    public double setSvanslängd(){
        if(ras.equalsIgnoreCase("tax")) {
            svanslängd = 3.7;
            return svanslängd;
        } else {
            svanslängd = (ålder * vikt)/10.0;
        }
        return svanslängd;
    }

    public String getNamn(){
        return namn;
    }

    public int getÅlder(){
        return ålder;
    }

    public int getVikt(){
        return vikt;
    }

    public String getRas(){
        return ras;
    }

    public double getSvanslängd(){
        return svanslängd;
    }

    public String toString(){
        return namn+" "+ras+" "+ålder+" år "+vikt+" kg Svans= "+svanslängd;
    }

    public static void main (String[] args) {
        Hund hund1 = new Hund ("Fido", 2, 3, "tax" );
        Hund hund2 = new Hund ("Peter", 4, 6, "varg");
        Hund hund3 = new Hund ("Roger", 2, 3, "chiwava");

        System.out.println (hund1);
        System.out.println (hund2);
        System.out.println (hund3);
    }

}

2 个答案:

答案 0 :(得分:2)

这是因为你有一个永远不会打电话的方法。

虽然您可以将setSvanslängd方法的调用添加到main来解决此问题,但这不是最好的方法:在构造函数中设置尾部的长度会好得多,再也不要碰了。这将是一个更直观的解决方案:

public Hund(String namn , int ålder , int vikt, String ras) {
    this.namn = namn;
    this.ålder = ålder;
    this.vikt = vikt;
    this.ras = ras;
    // Set the length of the tail
    if(ras.equalsIgnoreCase("tax")) {
        svanslängd = 3.7;
    }else{
        svanslängd = (ålder * vikt)/10.0;
    }
}

答案 1 :(得分:1)

问题很简单:永远不会调用该方法。这种方法不应该是公开的。它应该是私有的并且由构造函数调用:对象应该从一开始就处于正确的状态。没有理由在中间状态下构造它并强制调用者调用另一种方法来使狗的状态正确。并且该方法也应该返回void。

旁注:请用英文写下您的代码。大多数键盘甚至没有代码中使用的字符。