Java 在 switch 中调用方法
Java calling a method in a switch
所以我使用 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 读取为整数,那么所有测试用例都将
为假,因为您正在检查字符串值,案例“1”检查
string "1", while case 1: 将检查一个整数。
在输入 switch
语句之前声明 birthDay
。这个想法是您希望在访问一个(并且只有一个)案例时设置此值。
根据您对 daysInMonth
的定义,您可能会遇到未处理的 default
情况。您应该考虑如何定义和约束 switch 控制变量(可能使用枚举),这样您就不会有默认情况。
确保 daysInMonth
是字符串,并且 .equals()
案例正在执行的操作符合您的预期。我不确定像这样的不匹配会引发什么编译时错误,但肯定会有一个好的 IDE 警告你。
你的抽象层次是错误的。
你不应该在 switch 中调用 getRangedInt()
。相反,您应该有一个名为 getNumberOfDays()
的方法,它接受一个选择月份的输入(可以是 "January"、"February" 或 int 或枚举之类的字符串)。第二种方法可以在其中使用一个开关;但你不应该切换到其他任何地方。推理:关于一个月有多少的知识应该只在一个地方。在您的解决方案中,您需要在每个将处理 "days per month" 的地方使用完全相同的开关。导致代码重复,应该不惜一切代价避免。
然后您使用其他方法的 return 值调用您的方法 getRangedInt()
。
所以我使用 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 读取为整数,那么所有测试用例都将
为假,因为您正在检查字符串值,案例“1”检查
string "1", while case 1: 将检查一个整数。
在输入
switch
语句之前声明birthDay
。这个想法是您希望在访问一个(并且只有一个)案例时设置此值。根据您对
daysInMonth
的定义,您可能会遇到未处理的default
情况。您应该考虑如何定义和约束 switch 控制变量(可能使用枚举),这样您就不会有默认情况。确保
daysInMonth
是字符串,并且.equals()
案例正在执行的操作符合您的预期。我不确定像这样的不匹配会引发什么编译时错误,但肯定会有一个好的 IDE 警告你。
你的抽象层次是错误的。
你不应该在 switch 中调用 getRangedInt()
。相反,您应该有一个名为 getNumberOfDays()
的方法,它接受一个选择月份的输入(可以是 "January"、"February" 或 int 或枚举之类的字符串)。第二种方法可以在其中使用一个开关;但你不应该切换到其他任何地方。推理:关于一个月有多少的知识应该只在一个地方。在您的解决方案中,您需要在每个将处理 "days per month" 的地方使用完全相同的开关。导致代码重复,应该不惜一切代价避免。
然后您使用其他方法的 return 值调用您的方法 getRangedInt()
。