当我运行此程序时,它返回:
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());
}
}
答案 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);
请注意,类成员具有默认值,因为hour
是int
,它作为默认值(JLS 4.12.5. Initial Values of Variables)得到0。所以你的方法相当于:
hour = ((0 >= 0 && 0 < 24) ? 0 : 0);
其他方法也是如此。
附加说明:
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”中。