0

我有一个问题,要求用户输入 1-12 的数字,然后程序返回相应的月份。例如,如果他们用户输入数字“2”,则将打印字符串“Feb”。

我知道如何实现这一点,但我觉得有一种更好、更有效的方法来解决它。我正在考虑的方法是只为每个数字(1-12)制作 12 个 if 语句,然后根据数字打印相应的月份。

4

8 回答 8

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来获取月份名称。请参阅如何将整数转换为 Java 中的本地化月份名称?

于 2012-09-05T20:10:19.067 回答
2

使用哈希表。每个关键点都指向一个元素,例如您的月份。也许您也可以构建自己的哈希函数。可能是 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"           |
于 2012-09-05T20:10:36.723 回答
2

使用switch语句是一种方法。虽然使用不同的数据结构有更优雅的方法,但鉴于您是入门课程,理解数据结构会更难。

于 2012-09-05T20:10:51.523 回答
1

您可以简单地使用数组来实现这一点

arr = {"january", "february"
// etc
}
于 2012-09-05T20:11:42.773 回答
1

你可以使用 switch 语句,因为你没有使用任何结构,否则我会推荐一个 map,虽然一开始它会很像一堆 if 语句。

int monthNumber;
    String month;
    switch(monthNumber){
        case 1: month = "January";
                break;
        case 2: ...
    }
于 2012-09-05T20:13:28.660 回答
1

许多解决方案:

  • 使用Map数字 1、2、3 到“Jan”、“Feb”、“Mar”等的映射。
  • 使用字符串数组,但请记住数组索引以0String[] months = new String[] {"0 is no month", "Jan", "Feb", "Mar", ... };
  • 使用 switch/case 语句

如果您只需要一次,那么开关/机箱恕我直言是最干净的。

于 2012-09-05T20:14:35.300 回答
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";
    }
}

试试这些例子。

于 2012-09-05T21:09:03.100 回答
0

使用地图之类的地图月。然后months.get(i) 得到MonthName。

于 2012-09-05T20:11:47.407 回答