所以我使用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);
}
答案 0 :(得分:0)
如果您将daysInMonth作为整数读取,那么所有测试用例都将
为false,因为您正在检查字符串值,案例“1”检查
字符串“1”,而情况1:将检查整数。
答案 1 :(得分:0)
在输入birthDay
声明之前声明switch
。我们的想法是,您希望在访问一个(且仅一个)案例时设置此值。
根据您对daysInMonth
的定义,您最终可能会遇到未处理的default
案例。您应该考虑如何定义和约束开关控制变量(可能带有枚举),这样就不会出现默认情况。
确保daysInMonth
是字符串,并且.equals()
案例正在执行您所期望的操作。我不确定这样会导致编译时错误不匹配,但肯定会有一个好的IDE会警告你。
答案 2 :(得分:0)
您的抽象级别是错误的。
您不应在交换机内拨打getRangedInt()
。相反,你应该有一个名为getNumberOfDays()
的方法,它接受一个选择一个月的输入(可能是一个字符串,如"一月和#34;,"二月和#34;或一个int,或者一个枚举)。第二种方法可以使用其中的开关;但你不应该在其他任何地方切换。推理:关于一个月内有多少人的知识应该只在一个地方。在您的解决方案中,您需要在每个地方处理相同的开关,每月处理一次"天。#34;。导致代码重复,应该不惜一切代价避免。
然后使用其他方法的返回值调用方法getRangedInt()
。