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