当我从构造函数转到另一个类中的main方法时,我正在丢失数据。发生了什么事?

问题描述 投票:0回答:1
```
  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

如果你们中的任何人都认识到这一练习,那是Bucky的教程之一。附言我通常不会发布所有代码,但实际上我不知道与我的问题有关的内容是什么。


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());
   }
}
java methods constructor
1个回答
0
投票

您正在所有设置器中都设置hour,而您应该设置hourminutesecond

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);}
© www.soinside.com 2019 - 2024. All rights reserved.