Java在交换机中调用方法

Java在交换机中调用方法,java,methods,switch-statement,Java,Methods,Switch Statement,因此,我使用getRangedInt方法来计算用户的出生月份和日期,以及用于用户输入的扫描仪。如果他们选择二月(提示要求用户输入他们的出生月号,因此为1-12),那么我需要将该月的最大天数更改为28天(其他月份为30天,依此类推)。我试图使用一个开关来对月份进行分类,但是当程序运行时,它会跳过,并且永远不会调用该方法。该方法本身适用于其他示例。我错过了什么 switch (daysInMonth) { case "1": case "3":

因此,我使用getRangedInt方法来计算用户的出生月份和日期,以及用于用户输入的扫描仪。如果他们选择二月(提示要求用户输入他们的出生月号,因此为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读取为整数,那么所有测试用例都将

如果为false,因为您正在检查字符串值,则案例“1”将检查

字符串“1”,而案例1:将检查整数

  • 在输入
    开关
    语句之前声明
    生日
    。其思想是,您希望在访问一个(且仅一个)案例时设置此值

  • 根据您对
    daysInMonth
    的定义,您最终可能会遇到未处理的
    默认情况。您应该考虑如何定义和约束开关控制变量(可能使用枚举),这样就不会有默认情况

  • 确保
    daysInMonth
    是字符串,并且案例的
    .equals()
    执行的操作符合您的预期。我不确定这样的编译时错误会引发什么,但一个好的IDE肯定会警告您


  • 你的抽象层次是错误的

    您不应该在开关内调用
    getRangedInt()
    。相反,您应该有一个名为
    getNumberOfDays()
    的方法,该方法接受选择月份的输入(可以是“一月”、“二月”之类的字符串,也可以是整数或枚举)。第二种方法可以在其中使用开关;但你不应该在其他任何地方切换。推理:关于一个月有多少人的知识应该只在一个地方。在您的解决方案中,您需要在每个处理“每月天数”的地方使用相同的开关。导致代码重复,应不惜一切代价避免


    然后使用另一个方法的返回值调用方法
    getRangedInt()

    什么是
    daysInMonth
    ?此外,在输入switch语句之前,还需要使用默认值声明
    int birth
    。因为案例12正在生成一个具有该名称的局部变量,该局部变量将(假设)一个先前声明的具有该名称的变量隐藏起来。清楚你在做什么。确保在最后有一个
    默认值:
    案例。你是否用调试器逐步检查了你的代码?@sparky没有默认方法不应该让它在切换之前初始化?如果是这样,为什么要在
    案例'12
    之后用
    int-birth
    再次初始化它。如果类型不匹配,它将不会被编译。