Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一种不用一系列if语句就能实现这一点的方法?_Java - Fatal编程技术网

Java 有没有一种不用一系列if语句就能实现这一点的方法?

Java 有没有一种不用一系列if语句就能实现这一点的方法?,java,Java,我有一个问题,要求用户输入1-12之间的数字,然后程序返回相应的月份。例如,如果用户输入数字“2”,则会打印字符串“Feb” 我知道如何做到这一点,但我觉得有一种更好、更有效的解决方法。我当时考虑的方法是,为每个数字(1-12)制作12个if语句,然后根据数字打印相应的月份。使用由月份数字键入的地图。该值将包含月份名称 Map<Integer, String> monthNames = new HashMap<Integer, String>(); monthNames.

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


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

使用由月份数字键入的
地图。该值将包含月份名称

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
Map monthNames=newhashmap();
一月一日;
每月(2日,“2月”);
...
整月=3;
System.out.println(monthNames.get(month));//版画进行曲

还考虑使用<代码> DATEFATATORATIONS符号>代码>以获取月份名称。请参见使用。每个关键点都指向一个元素,比如你的月份。也许您也可以构建自己的哈希函数。可以是O(1)访问时间,而不是O(n)


使用语句是一种方法。虽然使用不同的数据结构有更优雅的方法,但由于您正在学习入门课程,因此理解数据结构将更加困难。

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

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

使用这样的地图。然后是MonthName。get(i)来get MonthName。

您可以使用switch语句,因为您没有使用任何结构,或者我建议使用map,尽管它一开始感觉非常像一堆if语句

int monthNumber;
    String month;
    switch(monthNumber){
        case 1: month = "January";
                break;
        case 2: ...
    }
许多解决方案:

  • 使用
    映射
    将数字1、2、3映射到“一月”、“二月”、“三月”等
  • 使用字符串数组,但请记住数组索引以
    0
    开头:
    String[]months=新字符串[]{“0不是月”、“一月”、“二月”、“三月”、“月”…}
  • 使用switch/case语句

如果只需要一次,那么switch/case将是最干净的。

您可以使用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";
    }
}

试试这些例子。

这是家庭作业吗?查找
case
语句。如果你在上课,你可能应该把它标记为家庭作业。也就是说,他们可能是想让你自己去学习case语句,或者强迫你使用一个大的if-else链,这样当你学习case语句时,你就可以真正了解它们的功能和使用方式。我想,你不是说“out”,而是说“put”,HashMap比HashTable快,不是吗?
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";
    }
}
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";
    }
}