有没有一种方法可以在没有一系列if语句的情况下实现这一点?

时间:2012-09-05 20:08:10

标签: java

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

我知道如何实现这一目标,但我觉得有更好,更有效的解决方法。我想到的方法就是为每个数字(1-12)制作12个if语句,然后根据数字打印相应的月份。

8 个答案:

答案 0 :(得分: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?

答案 1 :(得分: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");

Hashtables接受键和项的对象,因此您可以使用任何扩展Object的类。非常灵活。但是,使用对象可能会降低性能,因为你不是说“基准”之类的东西,这可能是你的朋友。

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

答案 2 :(得分:2)

使用switch语句是一种方法。尽管使用不同的数据结构有更优雅的方式,但鉴于您处于入门课程中,理解数据结构将更加困难。

答案 3 :(得分:1)

你可以简单地使用一个数组来实现这个

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

答案 4 :(得分:1)

你可以使用switch语句,因为你没有使用任何结构,否则我会推荐一个地图,虽然它最初会感觉像是一堆if语句。

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

答案 5 :(得分:1)

许多解决方案:

  • 使用Map将数字1,2,3映射到“Jan”,“Feb”,“Mar”等。
  • 使用字符串数组,但请记住数组索引以0开头:String[] months = new String[] {"0 is no month", "Jan", "Feb", "Mar", ... };
  • 使用开关/案例陈述

如果您只需要一次,那么开关/外壳将是最清洁的。

答案 6 :(得分:0)

使用类似Map map的地图。然后months.get(i)获取MonthName。

答案 7 :(得分: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";
    }
}

尝试这些例子。