2012-01-28 182 views
0

我對Java相當新,想知道這個邏輯看起來是否合理。此課程的目的是以12小時的格式接收用戶輸入的時間。然後提示用戶輸入一段時間。最後,它以12小時的格式輸出最後的時間(加上時間)。我已經運行了幾個測試場景,並且一切似乎都正常工作。在我稱之爲好之前,我只是想要一些額外的訓練眼睛來看它。謝謝你的幫助!Java類 - 添加n小時,分鐘和秒到一個時間

import javax.swing.JOptionPane; 

public class M3E7 { 
public static void main(String args[]) { 

    String start_hr = null; 
    String start_min = null; 
    String start_sec = null; 
    String abbr = null; 
    String hr = null; 
    String min = null; 
    String sec = null; 
    int start_hr_num = 0; 
    int start_min_num = 0; 
    int start_sec_num = 0; 
    int hr_num = 0; 
    int min_num = 0; 
    int sec_num = 0; 
    int final_hr = 0; 
    int final_min = 0; 
    int final_sec = 0; 

    start_hr = JOptionPane.showInputDialog("Start time - Enter the hours."); 
    start_min = JOptionPane.showInputDialog("Start time - Enter the minutes."); 
    start_sec = JOptionPane.showInputDialog("Start time - Enter the seconds."); 
    abbr = JOptionPane.showInputDialog("Start time - Enter either am or pm."); 
    hr = JOptionPane.showInputDialog("Enter the number of hours to add (less than 24)."); 
    min = JOptionPane.showInputDialog("Enter the number of minutes to add (less than 60)."); 
    sec = JOptionPane.showInputDialog("Enter the number of seconds to add (less than 60)."); 

    start_hr_num = Integer.parseInt(start_hr); 
    start_min_num = Integer.parseInt(start_min); 
    start_sec_num = Integer.parseInt(start_sec); 
    hr_num = Integer.parseInt(hr); 
    min_num = Integer.parseInt(min); 
    sec_num = Integer.parseInt(sec); 

    if (abbr.equals("pm")); { 
     start_hr_num += 12; 
    } 

    final_hr = (start_hr_num + hr_num); 
    final_min = (start_min_num + min_num); 
    final_sec = (start_sec_num + sec_num); 

    if (final_sec >= 60) { 
     final_min++; 
     final_sec -= 60; 
    } 

    if (final_min >= 60) { 
     final_hr++; 
     final_min -= 60; 
    } 

    if (final_hr >= 24) { 
     final_hr -= 24; 
    } 

    if (final_hr > 12) { 
     final_hr -= 12; 
     abbr.equals("pm"); 
    } 
    else if (final_hr == 12) { 
     final_hr -= 12; 
     abbr.equals("am"); 
    } 
    else { 
     abbr.equals("am"); 
    } 

    JOptionPane.showMessageDialog(null, "The new time of day is " + final_hr + ":" + final_min + ":" + final_sec + " " + abbr); 

    System.exit(0); 
    } 
} 
+0

如果這不是家庭作業,你應該知道做到這一點的方法已經存在。請參閱http://stackoverflow.com/questions/439903 – 2012-01-28 00:19:03

+1

類名稱中的E7指向這是「練習7」,它是在那個時候在這個學期... – Tim 2012-01-28 00:20:48

+0

這是學校的工作。我們應該利用迄今爲止有限的知識來完成這項工作(僅涵蓋了幾周的材料)。我會在我自己的努力掙扎之後,看到我可以在網上找到的替代解決方案...... :)。 – Deimos 2012-01-28 00:21:48

回答

4

請你幫個忙,並執行日期/時間算術自己。

相反,使用Joda Time來處理它爲您:

  • 解析所述第一輸入作爲LocalTime(經由DateTimeFormatter.parseLocalTime
  • 如使用Period.hours()Period.minutes()Period.seconds()
  • Period值解析接下來的三個輸入端
  • 使用LocalTime.plus(ReadablePeriod)將時間段添加到時間
  • 如您所願格式和輸出
+0

這是作業,對不起。 :P – 2012-01-28 00:28:56

+0

@RobertHarvey:好吧 - 我會把這個留給任何人做類似的東西:) – 2012-01-28 00:55:39

+0

謝謝你的意見。當我瞭解更多的道路時,這會給我一些東西來看看。現在對我來說看起來有點太高級了。 – Deimos 2012-01-28 03:44:41

0

既然是作業,我不想給你寫出完整的答案,但至少給你一些想法。

所有的時間和日期存儲爲從時代(即:1970年1月1日)毫秒。處理問題的方式是取用戶輸入的日期,並從中創建一個java.util.Date()對象。從該Date對象中,您可以簡單地從用戶的「期間」中添加/減去毫秒數。

然後,它只是打印出新的日期對象的練習。當然,我不知道這對你的類是不是已經太複雜了,但是這是一個相當簡單的方法(假設你已經使用了Date對象),而不使用任何第三方庫(如Joda Time )。

+0

我們還沒有使用Date對象;然而,我將來會回過頭看這篇文章,並在我獲得更多知識後再學習新的東西。感謝您的輸入。 – Deimos 2012-01-28 03:44:53

0

正如@Jon Skeet提到的那樣,使用Joda Time。它將幫助您輕鬆完成複雜的日期計算。

相關問題