这段代码哪里出错了么?为什么increase没有控制minute的更改?

这段代码哪里出错了么?为什么increase没有控制minute的更改?

问题描述:

package test1;

public class Display {
private int value = 0;
private int limit = 0;
public Display(int limit){
this.limit=limit;
}
public void increase(){
value++;
if(value==limit){
value=0;
}
}
public int getvalue(){
return value;
}

public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Display d= new Display(24);
    for(;;){
        d.increase();
        System.out.println(d.getvalue());
    }
}

}


package test1;

public class clock {
private Display hour= new Display(24);
private Display minute = new Display(60);
public void start(){
while(true){
minute.increase();
if(minute.getvalue()==0){
hour.increase();
System.out.printf("%02d:%02d\n",hour.getvalue(),minute.getvalue());
}
}
}

public static void main(String[] args) {
    // TODO 自动生成的方法存根
    clock clock = new clock();
    clock.start();
}

}


图片说明

实际上你的increase方法是更改了你的minute的value值的, 因为你将

System.out.printf("%02d:%02d\n",hour.getvalue(),minute.getvalue());
放在了minute==0 的判断语句里,所以只会显示当minute=0时的clock值

如果想要显示minute值,需要
while(true){
minute.increase();
if(minute.getvalue()==0){
hour.increase();
}
System.out.printf("%02d:%02d\n",hour.getvalue(),minute.getvalue());
}

初学者吧,看代码搞不清逻辑的话或者有觉得模糊的地方,可以打断点调试程序,你可以看到代码一行一行是怎么执行的。遇到问题别急,先捋一捋逻辑。打断点是一种很好的方式。