2013-05-30 105 views
0

我正在編寫一個Java程序,我需要將小時和分鐘增加1,並以HH:MM格式輸出當前時間。如果小時爲23,則應該回到0或者分鐘是59,分鐘應該爲0,小時應該到下一小時。這是我到目前爲止,但我不完全確定它是正確的。我也不確定這是否是使時間以小時和分鐘之間出現的正確方式。這裏是我的代碼:以HH:MM格式打印時間

//TimeOfDay program 

public class TimeOfDay 
{ 

    private int hour; 
    private int minute; 


    /** 
    * Constructor for objects of class TimeOfDay 
    */ 
    public TimeOfDay(int h, int m) 
    { 
     setHr(h); 
     setMin(m); 
    String time = "17:46"; 
    String [] values = time.split(":"); 

    } 

    public TimeOfDay() 
    { 

    } 




    /** 
    - set the hour using an input parameter h 
    - set the minute using an input parameter m 
    - add one hour (increase hour by 1) 
    - add one minute (increase minute by 1) 
    - output the current time in HH:MM format 
     (single digit hour or minute must have a leading 0, e.g. 04:09) 
    */ 


    public void setHr (int h) 
    { 
     if (0 <= h && h < 23) 
     hour = h; 
     else 
     hour = 0; 
    } 

    public void setMin (int m) 
    { 
     if (0 <= m && m < 59) 
     minute = m; 
     else 
     minute = 0; 
    } 

    public void addHour() 
    { 
     hour++; 

     if (hour > 23) 
     hour = 0; 
    } 

    public void addMinute() 
    { 
     minute++; 

     if (minute > 59) 
     { 
      minute = 0; 
      addHour(); //increment hour 
     } 
    } 

    public int printCurrentTime() 
    { 
     if (hour < 10) 
     System.out.print("0" + hour + ":"); 

     if (minute < 10) 
     System.out.print("0" + minute); 

     return time.split; 


    } 
} 
+0

如果這是** **不做作業,你可以只需使用[Java日曆API](http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)爲您執行所有操作。 – jahroy

回答

1

我會改變printCurrentTime()

public int printCurrentTime() { 
    System.out.printf("%02d:%02d%n", hour, minute); 
    return hour * 60 + minute; 
} 

的代碼的其餘部分似乎OK

+0

謝謝!這真的有幫助。只有兩個問題: 1.你能解釋一下這個部分的含義:「%02d:%02d%n」? 2.當我運行程序來使mytime(我設置爲11:30)出現時,會出現「11:30 TimeOfDay @ b6e0054」第二行是什麼,我如何讓它消失?或者是BlueJ程序的這一部分? 再次感謝您的幫助! –

+0

1)「%02d:%02d%n」是printf函數的格式字符串。 %02d表示:將第一個arg打印爲帶寬度= 2的小數,如果需要填充,則爲0;%b表示換行,詳情請參閱java.util.Formatter API。 2)額外的行來自程序中的其他地方。 –

+0

額外的行看起來像是在調用'System.out.println()'並將'TimeOfDay'對象的實例傳遞給它。它打印'TimeOfDay.toString()'返回的值。 – jahroy

2

您可以使用內置的java.utilCalendar類來實現這一點。通過add(field, value),您可以增加小時數,而日曆會保留日期分隔。

要獲得HH:MM格式,您可以使用SimpleDateFormat,格式爲「HH:mm」。

Calendar c = Calendar.getInstance(); //automatically set to current time 
c.add(Calendar.HOUR, 1); 

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); 
System.out.println(dateFormat.format(c.getTime())); 
3

已經有圖書館做的工作類型爲你如CalenderJodaTime。後者使這類工作特別容易。單一類LocalTime可以管理添加和格式化:

LocalTime localTime = new LocalTime("17:46"); 
LocalTime newTime = localTime.plusHours(1).plusMinutes(1); 
System.out.println(newTime.toString("HH:mm")); 
2

這顯然是家庭作業,所以我不會打擾推薦一個庫,會爲你做到這一點。

您的代碼看起來不錯,但您的printCurrentTime()方法除外,這是沒有意義的。

所有這種方法應該做的是從小時和分鐘建立一個字符串。

它應該是這個簡單:

public void printCurrentTime() { 
    System.out.println(hour + ":" + minute); 
} 

或者,如果你希望它返回一個字符串(可以在別處打印),它是這樣的:

public String toString() { 
    return hour + ":" + minute; 
} 

這是沒有意義讓該方法返回一個int。如果您想打印它應該返回void

它應該返回String如果你想它返回....一個字符串。


我剛剛通過您的代碼中的評論...其中提到不包括在您的問題中的要求。

由於您需要填充小時和分鐘(當它們小於10時),因此您需要添加更多邏輯。

我會親自使用String.format()墊你的號碼...

但是....因爲這是家庭作業,你可能不應該。

我將創建兩個簡單的方法:

  1. getHourString()
  2. getMinuteString()

雙方應返回字符串。

每種方法內部的邏輯將非常簡單。如下所示:

private String getHourString() { 
    String h = ""; 
    if (hour < 10) { 
     h = "0"; 
    } 
    return h + hour; 
} 

您可以對getMinuteString()做同樣的事情。

您的printCurrentTime()方法可以將這些方法的輸出結合起來(中間有一個:)。

換句話說:

public void printCurrentTime() { 
    String s = getHourString() + ":" + getMinuteString(); 
    System.out.println(s); 
} 
+0

是的,它是功課。那是我遇到的主要部分。是否可以使用公共字符串tostring代碼?例如,如果我創建一個名爲mytime的對象,並將mytime設置爲11:30,並且我希望它顯示mytime,那麼我會使用public String toString(11,30)還是public String toString(mytime)? –

+0

在我看來,這是完全可以接受的。這正是我所要做的:我會實現_toString()_因此它返回格式化的時間。我在這個網站上看到有人抱怨說,重寫'toString()'這樣的做法是不好的做法...但是我沒有看到有任何令人信服的理由同意它們。 – jahroy

+0

這裏是[一篇文章](http://www.javapractices.com/topic/TopicAction.do?Id=55),它重申了在你自己的類中重寫'toString()'的最佳實踐的一些理論。這裏是[一個答案](http://stackoverflow.com/a/11659528/778118)一個有知識的用戶建議'toString()'方法應該只用於調試。無論哪種方式......你想做的事情對於家庭作業來說當然沒問題! – jahroy