我有一个问题,要求用户输入 1-12 的数字,然后程序返回相应的月份。例如,如果他们用户输入数字“2”,则将打印字符串“Feb”。
我知道如何实现这一点,但我觉得有一种更好、更有效的方法来解决它。我正在考虑的方法是只为每个数字(1-12)制作 12 个 if 语句,然后根据数字打印相应的月份。
我有一个问题,要求用户输入 1-12 的数字,然后程序返回相应的月份。例如,如果他们用户输入数字“2”,则将打印字符串“Feb”。
我知道如何实现这一点,但我觉得有一种更好、更有效的方法来解决它。我正在考虑的方法是只为每个数字(1-12)制作 12 个 if 语句,然后根据数字打印相应的月份。
使用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
来获取月份名称。请参阅如何将整数转换为 Java 中的本地化月份名称?
使用哈希表。每个关键点都指向一个元素,例如您的月份。也许您也可以构建自己的哈希函数。可能是 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");
Hashtables 接受key 和 item 的对象,因此您可以使用任何扩展 Object 的类。非常灵活。但是,玩对象可能会稍微降低性能,因为你不是在说“基准”之类的东西,这可能是你的朋友。
__________________________________________________________
| You can use Integer.valueOf() (available since Java 1.5) |
| instead of new Integer Credit to "Steve Kuo" |
使用switch语句是一种方法。虽然使用不同的数据结构有更优雅的方法,但鉴于您是入门课程,理解数据结构会更难。
您可以简单地使用数组来实现这一点
arr = {"january", "february"
// etc
}
你可以使用 switch 语句,因为你没有使用任何结构,否则我会推荐一个 map,虽然一开始它会很像一堆 if 语句。
int monthNumber;
String month;
switch(monthNumber){
case 1: month = "January";
break;
case 2: ...
}
许多解决方案:
Map
数字 1、2、3 到“Jan”、“Feb”、“Mar”等的映射。0
:String[] months = new String[] {"0 is no month", "Jan", "Feb", "Mar", ... };
如果您只需要一次,那么开关/机箱恕我直言是最干净的。
您可以使用 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";
}
}
试试这些例子。
使用地图之类的地图月。然后months.get(i) 得到MonthName。