Programa De Relógio Java

eu estou tentando fazer um programa de relógio usando Java, e eu tenho tudo para funcionar corretamente, exceto que eu não consigo fazer o programa mudar os valores negativos para 0. Eu também não posso obter o programa para definir os valores de horas, minutos e segundos para 0 se eles estão fora de alcance. Tenho um programa de testes que tenho de usar e os valores do relógio T1 e T2 estão incorrectos no meu código. T1 deve ser 0: 0: 0 e T2 deve ser 0: 0: 0 também. No entanto, quando eu output meu código ele sai como T1 sendo -3: -21: -30 e o T2 é 24: 60: 60. Sei que há algo de errado com o meu código, mas não consigo encontrar o problema, se alguém me pudesse ajudar isso seria muito apreciado. Abaixo está o meu código e depois a segunda secção é o código de teste que tenho de usar.

 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;
    } 

}

} A próxima peça é o código de teste.

      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());
}

}

Author: mickeyvolmouse, 2018-04-25

2 answers

A sua condição está errada. Quando escreveres isto:
if (newHour > -1 || newHour < 24) {

Estás a falar a sério:

if (newHour > -1 && newHour < 24) {
 3
Author: nicomp, 2018-04-25 00:27:14

@nicomp está correcto e você também deve usar > = 24 e 60 em vez de >. Você pode considerar mudar o construtor para relógio para

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

E depois fazer toda a sua validação nos métodos definidos, em vez de ter alguma validação nos métodos definidos e alguns no construtor.

 2
Author: Josef7, 2018-04-25 00:38:51