Java时钟程序

时间:2018-04-25 00:22:26

标签: java constructor clock accessor mutators

我正在尝试使用Java制作一个时钟程序,我得到了一切正常工作,除了我无法让程序将负值更改为0.我也无法让程序设置小时,分钟,如果它们超出范围,则秒为0。我有一个必须使用的测试程序,我的代码中的T1和T2时钟值不正确。 T1应为0:0:0,T2也应为0:0:0。但是,当我输出我的代码时,它出现为T1为-3:-21:-30,T2为24:60:60。我知道我的代码有问题,但我无法找到问题,如果有人能够帮助我,我将非常感激。下面是我的代码,然后第二部分是我必须使用的测试人员代码。

 public class Clock
 {
     // instance variables
     private int hours;
     private int minutes;
     private int seconds;

   public void setHours(int newHours) {
    hours = newHours;
    if (hours<0 || hours > 24) {
        hours = 0;
      }
   }
   public void setMinutes(int newMinutes) {
    minutes = newMinutes;
    if (minutes<0 || minutes > 60) {
        minutes = 0;
    }
   }
   public void setSeconds(int newSeconds) {
    seconds = newSeconds;
    if(seconds<0 || seconds > 60) {
        seconds = 0;
    }
    }

/**
 * Constructor for objects of class Clock
 */
    public Clock(int newHour, int newMinute, int newSecond)
   {
    if (newHour > -1 || newHour < 24) {
        this.hours = newHour;
    }
    else {
        setHours(hours);
    }
    if (newMinute > -1 || newMinute < 60) {
        this.minutes = newMinute;
    }
    else {
        setMinutes(minutes);
    }
    if (newSecond > -1 || newSecond < 60) {
        this.seconds = newSecond;
    }
    else {
        setSeconds(seconds);
    }
}

public int getHours() {
    return hours;
}
public int getMinutes() {
    return minutes;
}
public int getSeconds() {
    return seconds;
}

public String toString() {
    return hours + ":"+minutes+":"+seconds;
}

public void tick() {
    seconds = seconds +1;
    if(seconds >= 60)
    {
        minutes ++;
        seconds = 0;
    }
    if(minutes >= 60)
    {
        hours++;
        minutes = 0;
    }
    if(hours >=24)
    {
        hours = 0;
    } 

}

} 下一部分是测试人员代码。

      public class ClockTest {
      public static void main(String [] args){

      //Create some clocks and print their times
      Clock c1 = new Clock(-3,-21,-30);
      System.out.println("T1: "+ c1);

      c1 = new Clock(24,60,60);
      System.out.println("T2: "+ c1);

      c1 = new Clock(3,21,30);
      System.out.println("T3: "+ c1);

      //Tick the clock twice and print its time
      c1.tick();
      c1.tick();
      System.out.println("T4: "+ c1);

      c1 = new Clock(3,30,59);
      c1.tick();
      System.out.println("T5: "+ c1);

       c1 = new Clock(3,59,59);
       c1.tick();
       System.out.println("T6: "+ c1);

       c1 = new Clock(23,59,59);
       c1.tick();
       System.out.println("T7: "+ c1);

       c1 = new Clock(0,0,1);
       c1.tick();
       System.out.println("T8: "+ c1);

       c1 = new Clock(1,1,1);
       c1.setHours(22);
       c1.setMinutes(30);
       c1.setSeconds(35);
       System.out.println("T9: "+ c1);       
       System.out.println("T10: " + c1.getHours() + ":"
                    +c1.getMinutes() + ":" + c1.getSeconds());
}

}

2 个答案:

答案 0 :(得分:3)

你的病情有误。 当你这样写:

if (newHour > -1 || newHour < 24) {

你的意思是:

if (newHour > -1 && newHour < 24) {

答案 1 :(得分:2)

@nicomp是正确的,你也应该使用&gt; = 24和60而不是&gt;。您可以考虑将Clock的构造函数更改为

public Clock(int newHour, int newMinute, int newSecond) {
    setHours(newHour);
    setMinutes(newMinute);
    setSeconds(newSecond);
}

然后在set方法中进行所有验证,而不是在set方法中进行一些验证,而在构造函数中进行一些验证。