我试图写一个Time对象,它有一个增量方法,为它添加任意秒,所以这里是代码:
class Time {
int hour, minute;
double second;
public Time(int hour, int minute, double second) {
this.hour = hour;
this.minute = minute;
this.second = second;
}
public Time(double seconds) {
this.hour = (int) (seconds/3600);
seconds -= this.hour*3600;
if (this.hour >= 24) this.hour -= 24;
this.minute = (int) (seconds/60);
seconds -= this.minute*60;
this.second = seconds;
}
public static double convertToSeconds(Time t) {
double seconds = t.hour*3600 + t.minute*60 + t.second;
return seconds;
}
public static void increment(Time t, double s) {
double seconds = convertToSeconds(t) + s;
t = new Time(seconds);
printTime(t);
}
public static void printTime(Time t) {
System.out.println(t.hour + ":" + t.minute + ":" + t.second);
}
public static void main(String[] args) {
Time t = new Time(11, 8, 3.0);
printTime(t);
increment(t, 60);
printTime(t);
}
}
它给出了这个输出:
11:8:3.0
11:9:3.0
11:8:3.0
它显示对象已在增量方法内按预期更改,但在调用增量方法后返回main,对象保持不变。问题是什么?
答案 0 :(得分:0)
您无法通过方法参数更改变量的引用内容,即t = new Time(seconds);
不会更改main
方法指向t
的地址。如果您想要持续更改,则必须在t
中返回increment
并将main
更改为
t = increment(t, 60);
printTime(t);
答案 1 :(得分:0)
您设置t指向方法内的新对象。这只会改变方法中t的refrernce,并且不会影响外部范围。
要修复,要么更改方法以返回nee对象(并在主体中指定它),要么更改实现以更改现有对象中的时间而不是创建新对象。