Java调用开关中的方法



所以我使用getRangedInt方法来计算用户的出生月份和日期,以及用于用户输入的Scanner。如果他们选择二月(提示要求用户输入他们的出生月份,所以是1-12),那么我需要将该月的最大天数更改为28天(其他有30天的月份依此类推)。我试图使用开关来对月份进行分类,但是当程序运行时,它只是跳过,并且从未调用该方法。该方法本身可以很好地用于其他示例。我错过了什么?

switch (daysInMonth)
    {
        case "1":
        case "3":
        case "5":
        case "7":
        case "8":
        case "10":
        case "12":
            int birthDay = getRangedInt(input,"Enter your birth day: ",1,31);
            break;
        case "2":
            birthDay = getRangedInt(input,"Enter your birth day: ",1,28);
            break;
        case "4":
        case "6":
        case "9":
        case "11":
            birthDay = getRangedInt(input,"Enter your birth day: ",1,30);
    }

如果您读取daysInMonth作为整数,那么所有的测试用例将

为假,因为您正在检查字符串值,case "1"检查

string "1",而case 1:将检查是否为整数。

  1. 在进入switch语句之前声明birthDay。这个想法是,您希望在访问一个(且只有一个)case时设置此值。

  2. 根据您对daysInMonth的定义,您可能会在未处理的default情况下结束。您应该考虑如何定义和约束开关控制变量(可能使用enum),这样您就不能有默认情况。

  3. 确保daysInMonth是字符串,并且.equals()的情况下所做的是你所期望的。我不确定像这样的编译时错误不匹配会引起什么,但肯定一个好的IDE会警告你。

你的抽象层次是错误的。

你不应该在交换机中调用getRangedInt()。相反,您应该使用一个名为getNumberOfDays()的方法,该方法接受选择月份的输入(可以是字符串,如"January","February",或int或enum)。第二种方法可以使用其中的开关;但你不应该换到其他地方。推理:关于一个月有多少人的知识应该只存在于一个地方。在您的解决方案中,您需要在每个地方使用相同的开关来处理"每月的天数"。导致代码重复,无论如何都要避免。

然后使用其他方法的返回值调用方法getRangedInt()

相关内容

最新更新