2012-09-05 66 views
0

我有一個問題,詢問用戶從1-12的數字,然後程序返回相應的月份。例如,如果用戶輸入數字「2」,則會打印字符串「Feb」。如果沒有一系列if語句,是否有辦法實現這一點?

我知道如何做到這一點,但我覺得有一個更好,更有效的解決方法。我想這樣做的方式就是爲每個數字(1-12)製作12個if語句,然後根據數字打印相應的月份。

+0

這功課嗎?查看'case'語句。 –

+1

如果你正在上課,你應該把它標記爲家庭作業。話雖如此,他們可能要麼試圖讓你自己學習案例陳述,要麼迫使你使用一個大的if-else鏈,這樣當你學習病例陳述時,你可以真正感激他們做了什麼以及他們是怎麼做的用過的。 –

回答

3

使用由月份編號鍵入的Map。該值將包含月份名稱。

Map<Integer, String> monthNames = new HashMap<Integer, String>(); 
monthNames.put(1, "January"); 
monthNames.put(2, "February"); 
... 
int month = 3; 
System.out.println(monthNames.get(month)); // prints March 

還考慮使用DateFormatSymbols來獲取月份名稱。見How can I convert an Integer to localized month name in Java?

+0

而不是「你」的意思是「放」,我猜? – gefei

+0

@gefei謝謝,趕上 –

+0

HashMap比HashTable更快不是嗎? –

2

使用hashtables。每個關鍵點都指向像你的月份那樣的元素。也許你也可以建立你自己的散列函數。可能是O(1)訪問時間而不是O(n)。

Hashtable numbers = new Hashtable(); 
numbers.put("one", new Integer(1)); //String<-->Integer 
numbers.put("two", new Integer(2)); 
numbers.put("three", new Integer(3)); 

    Integer n = (Integer)numbers.get("two"); 
if (n != null) { 
    System.out.println("two = " + n); 
} 

You can change the key and element(in this example they are String and Integer) like this: 

Hashtable<Integer, String> abc=new Hashtable<Integer, String>(); 
    abc.put(new Integer(4), "hello"); 

Hashtable中接受key和項目,以便您可以使用擴展對象的任何類對象。非常靈活。但是,玩對象可能會降低性能,因爲你不是在說什麼像「基準」,這可能是你的朋友。

__________________________________________________________ 
| You can use Integer.valueOf() (available since Java 1.5) | 
| instead of new Integer Credit to "Steve Kuo"   | 
2

使用switch聲明是一種方法。儘管使用不同的數據結構有更多優雅的方法,但考慮到你在入門課程中,理解數據結構將會變得更加困難。

1

你可以簡單地使用數組來實現這一

arr = {"january", "february" 
// etc 
} 
0

使用像那樣的地圖地圖個月。然後months.get(i)得到MonthName。

1

由於您沒有使用任何結構,因此您可以使用switch語句,否則我會推薦一張地圖,儘管它起初很像是一堆if語句。

int monthNumber; 
    String month; 
    switch(monthNumber){ 
     case 1: month = "January"; 
       break; 
     case 2: ... 
    } 
1

許多解決方案:

  • 使用Map映射的數字1,2,3爲 「月」, 「月」, 「月」,等等
  • 使用一個字符串數組,但請記住,數組的下標開始0String[] months = new String[] {"0 is no month", "Jan", "Feb", "Mar", ... };
  • 使用開關/ case語句

如果你只需要這一次,開關/情況下恕我直言將是最乾淨的。

0

你可以使用switch語句,或者你可以使用一些數據結構來代替地圖,數組,列表等等。

開關實施例1:

public String getMonth(int month) 
{ 
    switch (month) 
    { 
     case 1: return "January"; 
     case 2: return "February"; 
     case 3: return "March"; 
     case 4: return "April"; 
     case 5: return "May"; 
     case 6: return "June"; 
     case 7: return "July"; 
     case 8: return "August"; 
     case 9: return "September"; 
     case 10: return "October"; 
     case 11: return "November"; 
     case 12: return "December"; 
    } 
} 

開關實施例2:

public String getCondition(int month) 
{ 
    String message = ""; 
    switch (month) 
    { 
     case 1: message = "January"; 
      break; 
     case 2: message = "February"; 
      break; 
     case 3: message = "March"; 
      break; 
     case 4: message = "April"; 
      break; 
     case 5: message = "May"; 
      break; 
     case 6: message = "June"; 
      break; 
     case 7: message = "July"; 
      break; 
     case 8: message = "August"; 
      break; 
     case 9: message = "September"; 
      break; 
     case 10: message = "October"; 
      break; 
     case 11: message = "November"; 
      break; 
     case 12: message = "December"; 
      break; 
     default: message = "Invalid month"; 
    } 
} 

嘗試這些例子的。

相關問題