首页 > 解决方案 > 如何解决 Java 中的 switch case 错误?

问题描述

问题是这样的:

创建一个 while 循环,该循环将使用从 1 开始并每次通过循环递增 1 的计数器执行以​​下代码 12 次。

在 while 循环中,创建一个 switch 语句,该语句将打印出一年中每个月份的天数。使用贯穿功能,以便您只有一份包含 31 天的所有月份的打印报表。不要担心闰年。

也打印出月份的名称。您可以从上一个实验室复制并粘贴您的月份名称数组,以帮助简化此操作。

这是我的答案:

int numOfMonth = 1;
String[] months ={
    "January", "February", "March", "April", "May", "June", "July",
    "August" , "September" , "October" , "November", "December"};
int[] daysOfMonths = {28, 30, 31};

// String output;

    while(numOfMonth++ <= 12){
        int index = numOfMonth -1;

        switch(numOfMonth){
            case 2:
                System.out.println(months[index] + " has " + daysOfMonths[0] + " Days.");
                break;

            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println(months[index] + " has " + daysOfMonths[1] + " Days.");
                break;
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println(months[index] + " has " + daysOfMonths[2] + " Days.");
                break;
            default:
                break;
        }
    }

此代码正确输出所有其他值,除了它不输出一月。

请问,我该怎么办?

标签: javaswitch-statement

解决方案


使用for循环而不是while循环:

for (int i=1; i <= numOfMonth; ++i) {
    int index = i - 1;

    switch (i) {
        // current switch statement
    }
}

while正如所写的,循环的问题在于后缀将numOfMonth在循环 evem 的第一次迭代开始之前递增到 2:

while(numOfMonth++ <= 12){

因此,一月总是会被跳过。


推荐阅读