Java中的Setter和Getters

时间:2015-05-26 07:02:38

标签: java setter getter

当我运行此程序时,它返回:

  

00:00:00
  00:00:00
  00:00:00
  00:00:00

我做错了什么,如何让它返回我打算返回的数字?

这是我主类中的代码。

public static void main(String[] args) {
    tuna tunaObject1 = new tuna();
    tuna tunaObject2 = new tuna(5);
    tuna tunaObject3 = new tuna(5, 13);
    tuna tunaObject4 = new tuna(5, 13, 43);

    System.out.println(tunaObject1.toMilitary());
    System.out.println(tunaObject2.toMilitary());
    System.out.println(tunaObject3.toMilitary());
    System.out.println(tunaObject4.toMilitary());
}

}    

这是我在主要课程之外的课程中的代码。

public class tuna {
    private int hour;
    private int minute;
    private int second;

public tuna() {
    this(0, 0, 0);
}

public tuna(int h) {
    this(h, 0, 0);
}

public tuna(int h, int m) {
    this(h, m, 0);
}

public tuna(int h, int m, int s) {
    setTime(h, m, s);
}

public void setTime(int h, int m, int s) {
    setHour(h);
    setMinute(m);
    setSecond(s);
}

public void setHour(int h) {
    hour = ((hour >= 0 && hour < 24) ? hour:0);
}

public void setMinute(int m) {
    minute = ((minute >= 0 && minute < 60) ? minute:0);
}

public void setSecond(int s) {
    second = ((second >= 0 && second < 60) ? second:0);
}

public int getHour() {
    return hour;
}

public int getMinute() {
    return minute;
}

public int getSecond() {
    return second;
}

public String toMilitary() {
    return String.format("%02d:%02d:%02d", getHour(), getMinute(),  getSecond());
}

}

5 个答案:

答案 0 :(得分:3)

public void setHour(int h) {
    hour = ((hour >= 0 && hour < 24) ? hour:0);
}

应该是

public void setHour(int h) {
    hour = ((h >= 0 && h < 24) ? h:0);
}

同样适用于其他制定者

答案 1 :(得分:3)

setHour方法查看示例:

hour = ((hour >= 0 && hour < 24) ? hour:0);

请注意,类成员具有默认值,因为hourint,它作为默认值(JLS 4.12.5. Initial Values of Variables)得到0。所以你的方法相当于:

hour = ((0 >= 0 && 0 < 24) ? 0 : 0);

其他方法也是如此。

附加说明:

  • 调试代码 - 调试器将帮助您快速发现错误的原因
  • 关注Java Naming Conventions并将您的班级重命名为Tuna

在我描述问题之后,很容易解决它。使用h代替hour,我相信您可以自己处理。

答案 2 :(得分:2)

更改此

public void setHour(int h) {
    hour = ((hour >= 0 && hour < 24) ? hour:0);
}

应该是

public void setHour(int h) {
    hour = ((h >= 0 && h < 24) ? h:0);
}

同样,对于其他人,你必须改变。问题是你错误地分配了变量。请看@Maroun Maroun的答案。他清楚地告诉你为什么它不起作用。编写代码时请遵循Java惯例。

答案 3 :(得分:0)

请尝试以下方法:传递值对实际字段没有影响,因为它们显示默认值。

public void setHour(int h) {
    hour = ((h >= 0 && h < 24) ? h : 0);
}

public void setMinute(int m) {
    minute = ((m >= 0 && m < 60) ? m : 0);
}

public void setSecond(int s) {
    second = ((s >= 0 && s < 60) ? s : 0);
}

答案 4 :(得分:0)

假设预期的输出是 00:00:00 05:00:00 05:13:00 5点13分43秒

你必须在金枪鱼类中进行更改

public void setHour(int h) {
        hour = ((hour >= 0 && hour < 24) ? h:0);
    }

    public void setMinute(int m) {
        minute = ((minute >= 0 && minute < 60) ? m:0);
    }

    public void setSecond(int s) {
        second = ((second >= 0 && second < 60) ? s:0);
    }

原因:在setter方法中,传递的值应该分配给类属性/属性,这里传递的值存储在变量“s”而不是“second”中。