Программа Java Clock

Я пытаюсь создать программу часов с использованием 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());
}

}

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
3 650
2

Ответы 2

Ваше состояние неправильное. Когда вы напишете это:

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

Вы действительно имеете в виду это:

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

Вместо этого я бы предложил if (newHour >= 0 && newHour <= 23) ..., так как он лучше документирует точный диапазон допустимых часов. Аналогично для минут и секунд (например, m> = 0 && m <= 59 вместо m> -1 && m <60)

Kevin Anderson 25.04.2018 02:41

@KevinAnderson Окей Доки. Я думаю, что большинство разработчиков привыкли к тому, как вы его написали, а не к OP.

nicomp 25.04.2018 02:45

@nicomp верен, и вы также должны использовать> = 24 и 60 вместо>. Вы можете подумать об изменении конструктора Clock на

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

а затем выполните всю вашу проверку в установленных методах, вместо того, чтобы иметь некоторую проверку в установленных методах и некоторых в конструкторе.

Другие вопросы по теме