需要帮助增加getHour方法

时间:2014-10-07 19:37:33

标签: java methods time

我目前正在尝试增加代码以添加秒,如果第二个更改小时和分钟,则会反映出来。这是我目前的代码。我知道我遇到的问题在于get小时方法,因为它是唯一一个没有递增的方法。谢谢你的帮助。

    public class Time2
{
   private int hour;   // 0 - 23
   private int minute; // 0 - 59
   private int second; // 0 - 59
   private int seconds;

   // Time2 no-argument constructor: initializes each instance variable 
   // to zero; ensures that Time2 objects start in a consistent state
   public Time2()
   {
      this( 0, 0, 0 ); // invoke Time2 constructor with three arguments
   } // end Time2 no-argument constructor

   // Time2 constructor: hour supplied, minute and second defaulted to 0
   public Time2( int h ) 
   { 
      this( h, 0, 0 ); // invoke Time2 constructor with three arguments
   } // end Time2 one-argument constructor

   // Time2 constructor: hour and minute supplied, second defaulted to 0
   public Time2( int h, int m ) 
   { 
      this( h, m, 0 ); // invoke Time2 constructor with three arguments
   } // end Time2 two-argument constructor 

   // Time2 constructor: hour, minute and second supplied
   public Time2( int h, int m, int s ) 
   { 
      setTime( h, m, s ); // invoke setTime to validate time
   } // end Time2 three-argument constructor 

   // Time2 constructor: another Time2 object supplied
   public Time2( Time2 time )
   {
      // invoke Time2 three-argument constructor
      this( time.getHour(), time.getMinute(), time.getSecond() );
   } // end Time2 constructor with a Time2 object argument

   // Set Methods
   // set a new time value using universal time; ensure that 
   // the data remains consistent by setting invalid values to zero
   public void setTime( int h, int m, int s )
   {
      setHour( h );   // set the hour
      setMinute( m ); // set the minute
      setSecond( s ); // set the second
   } // end method setTime

   // validate and set hour 
   public void setHour( int h ) 
   { 
      hour = ( ( h >= 0 && h < 24 ) ? h : 0 ); 
   } // end method setHour

   // validate and set minute 
   public void setMinute( int m ) 
   { 
      minute = ( ( m >= 0 && m < 60 ) ? m : 0 ); 
   } // end method setMinute

   // validate and set second 
   public void setSecond( int s ) 
   { 
      second = ( ( s >= 0 && s < 60 ) ? s : 0 ); 
   } // end method setSecond

   // Get Methods
   // get hour value
   public int getHour() 
   { 
       if(minute > 59)
       {
         hour++;
       }

      return hour; 
   } // end method getHour

   // get minute value
   public int getMinute() 
   { 
       if(second > 59)
       {
          minute++;
       }
       if(minute > 59)
       {
          minute = 00;
       }

      return minute; 
   } // end method getMinute

   // get second value
   public int getSecond() 
   {
       if(second > 59)
       {
           second = 00;
       }
      return second++; 
   } // end method getSecond

   // convert to String in universal-time format (HH:MM:SS)
   public String toUniversalString()
   {
      return String.format( 
         "%02d:%02d:%02d", getHour(), getMinute(), getSecond() );
   } // end method toUniversalString

   // convert to String in standard-time format (H:MM:SS AM or PM)
   public String toString()
   {
      return String.format( "%d:%02d:%02d %s", 
         ( (getHour() == 0 || getHour() == 12) ? 12 : getHour() % 12 ),
         getMinute(), getSecond(), ( getHour() < 12 ? "AM" : "PM" ) );
   } // end method toString
} // end class Time2

我从测试应用中获得的结果是:

public class Time2Test 
{
   public static void main(String[] args)
   {
      Time2 t1 = new Time2(); // 00:00:00
      Time2 t2 = new Time2(2); // 02:00:00
      Time2 t3 = new Time2(21, 34); // 21:34:00
      Time2 t4 = new Time2(12, 59, 59); // 12:25:42
      Time2 t5 = new Time2(t4); // 12:25:42

      System.out.println("Constructed with:");
      displayTime("t1: all default arguments", t1);
      displayTime("t2: hour specified; default minute and second", t2);
      displayTime("t3: hour and minute specified; default second", t3);
      displayTime("t4: hour, minute and second specified", t4);
      displayTime("t5: Time2 object t4 specified", t5);

      // attempt to initialize t6 with invalid values
      try
      {
         Time2 t6 = new Time2(27, 74, 99); // invalid values
      } 
      catch (IllegalArgumentException e)
      {
         System.out.printf("%nException while initializing t6: %s%n",
            e.getMessage());
      } 
   } 

   // displays a Time2 object in 24-hour and 12-hour formats
   private static void displayTime(String header, Time2 t)
   {
      System.out.printf("%s%n   %s%n   %s%n",
         header, t.toUniversalString(), t.toString());
   } 
} // end class Time2Test

输出:

Constructed with:
t1: all default arguments
   00:00:00
   12:00:01 AM
t2: hour specified; default minute and second
   02:00:00
   2:00:01 AM
t3: hour and minute specified; default second
   21:34:00
   9:34:01 PM
t4: hour, minute and second specified
   12:00:00
   12:00:01 PM
t5: Time2 object t4 specified
   12:59:59
   12:00:00 PM

1 个答案:

答案 0 :(得分:0)

在这段代码中:

getMinute(), getSecond(), ( getHour() < 12 ? "AM" : "PM" )

如果分钟大于59,则getMinute方法会将分钟更改为0.然后,当调用getHour时,分钟为0,因此小时不会增加。

正如其他人所说,不要在getter中修改变量。它会造成各种各样的破坏。