Я теряю данные при переходе от конструктора к основному методу в другом классе. Что происходит? - PullRequest
1 голос
/ 29 мая 2020
```
  public class tuna 
  {
     private int hour;
     private int minute;
     private int second;

     // Constructor with 0 passed arguments
     public tuna()
     {
        this(0,0,0);
     }

     // Constructor with 1 passed arguments
     public tuna(int h)
     {
        this(h,0,0);
     }

     // Constructor with 2 passed arguments
     public tuna(int h, int m)
     {
        this(h,m,0);
     }

     // Constructor with 3 passed arguments
     public tuna(int h, int m, int s)
     {
        setTime(h,m,s);
     }

     // setTime method
     public void setTime(int h, int m, int s)
     {
        setHour(h);
        setMinute(m);
        setSecond(s);
     }

     /*----------Set methods----------*/
     public void setHour(int h) {hour = ( (h>=0 && h<24)?h : 0);}
     public void setMinute(int m) {hour = ( (m>=0 && m<60)?m : 0);}
     public void setSecond(int s) {hour = ( (s>=0 && s<60)?s : 0);}

     /*----------Get methods----------*/
     public int getHour() { 
        return hour;}
     public int getMinute() { 
        return minute;}
     public int getSecond() { 
        return second;}

     public String toMilitary()
     {
        return String.format("%02d:%02d:%02d", getHour(), getMinute(), getSecond());
     }
  }
```

Выше - класс, содержащий конструкторы и методы, а ниже - класс с основной функцией, которая фактически вызывает конструкторы и методы.

Я делал эту простую программу, которая отображает время и упражнение показало, что у вас может быть несколько конструкторов с разным количеством параметров. Единственная проблема заключается в том, что когда я нахожусь на этапе конструктора, вся информация верна, но когда отладчик переходит от конструктора к классу, который он используется, вся информация исчезает, кроме этой одной строки. Я думаю, это как-то связано с тем, как я настроил конструкторы, но я не могу понять, что я сделал не так. Любая помощь была бы замечательной. Спасибо!

Вот результат, который я получаю:

What I am getting

Желаемый результат:

Desired output

И если кто-то из вас узнает это упражнение, это одно из руководств Баки. PS Обычно я не публикую весь код, но я буквально понятия не имею, что может иметь отношение к моей проблеме, а что нет.


class apples
{
   public static void main(String[] args)
   {
      tuna obj1 = new tuna(); // No parameter constructor
      tuna obj2 = new tuna(5); // 1 parameter constructor
      tuna obj3 = new tuna(5,13); // 2 parameter constructor
      tuna obj4 = new tuna(5,13,43); // 3 parameter constructor

      System.out.printf("%s\n", obj1.toMilitary());
      System.out.printf("%s\n", obj2.toMilitary());
      System.out.printf("%s\n", obj3.toMilitary());
      System.out.printf("%s\n", obj4.toMilitary());
   }
}

1 Ответ

2 голосов
/ 29 мая 2020

Вы назначаете hour во всех установщиках, в то время как вы должны устанавливать hour, minute и second:

/*----------Set methods----------*/
public void setHour(int h) {hour = ( (h>=0 && h<24)?h : 0);}
public void setMinute(int m) {minute = ( (m>=0 && m<60)?m : 0);}
public void setSecond(int s) {second = ( (s>=0 && s<60)?s : 0);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...