2015-07-10 36 views
0

輸入例如convertToAmPm("13":"30");將24小時制轉換爲12小時上午/下午制時間。是否有任何條件會打破這種算法?

private String convertToAmPm(String hour, String minute) { 
    final String am = "am"; 
    final String pm = "pm"; 
    String amPm = pm; 
    try { 
     int i = Integer.parseInt(hour); 
     switch (i) { 
     case 0: 
      hour = "12"; 
      amPm = am; 
      break; 
     case 23: 
      hour = "11"; 
      amPm = pm; 
      break; 
     case 22: 
      hour = "10"; 
      amPm = pm; 
      break; 
     case 21: 
      hour = "9"; 
      amPm = pm; 
      break; 
     case 20: 
      hour = "8"; 
      amPm = pm; 
      break; 
     case 19: 
      hour = "7"; 
      amPm = pm; 
      break; 
     case 18: 
      hour = "6"; 
      amPm = pm; 
      break; 
     case 17: 
      hour = "5"; 
      amPm = pm; 
      break; 
     case 16: 
      hour = "4"; 
      amPm = pm; 
      break; 
     case 15: 
      hour = "3"; 
      amPm = pm; 
      break; 
     case 14: 
      hour = "2"; 
      amPm = pm; 
      break; 
     case 13: 
      hour = "1"; 
      amPm = pm; 
      break; 

     default: 
      hour = ""+i; 
      break; 
     } 
     return hour + ":" + minute + " " + amPm; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return hour + ":" + minute; 
} 
+3

所有你需要做的就是減12。算法是矯枉過正。 –

回答

1

就像我在我的評論說,你並不需要所有的交換機。所有你需要的是:

 int i = Integer.parseInt(hour); 
     if (i > 12) 
      i = i - 12; 

...用一個簡單的am/pm檢查。這將使你的算法不僅更強大(你不會問「它會中斷」,而且更容易閱讀和理解)。

+1

12:30不是00:30 pm –

-2

時間在01:00到11:59之間的所有輸入都會導致錯誤的輸出。 默認情況下 - >字符串amPm應該被初始化爲am。

更重要的是,所用的算法並不是解決這個問題的正確方法。

+1

用什麼票倒票?我指出的是正確的:使用convertToAmPm()的當前定義;將其作爲System.out.println(convertToAmPm(「01」,「00」));輸出=> 1:00 pm –

0

正如大衛所言,寫出這麼多的案例是一件矯枉過正的事情。下面是你可以實現它的一種方法:

private static String convertToAmPm(String hour, String minute) {  

     String amOrPm="am"; 
     int intHour=Integer.parseInt(hour); 
     int intMinute=Integer.parseInt(minute); 

     if(intHour<0 || intHour>24 || intMinute<0 || intMinute>60){ 
      throw new IllegalArgumentException(); 
     }   

     if(intHour>=12){    
      if(intHour!=24) 
       amOrPm="pm"; 
      if(intHour!=12) 
       intHour= Integer.parseInt(hour)-12; 
     } 

     return intHour+":"+intMinute+" "+amOrPm; 
    } 
相關問題