Java在交换机中调用方法

时间:2015-10-23 19:06:56

标签: java methods switch-statement

所以我使用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);
    }

3 个答案:

答案 0 :(得分:0)

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

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

字符串“1”,而情况1:将检查整数。

答案 1 :(得分:0)

  1. 在输入birthDay声明之前声明switch。我们的想法是,您希望在访问一个(且仅一个)案例时设置此值。

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

  3. 确保daysInMonth是字符串,并且.equals()案例正在执行您所期望的操作。我不确定这样会导致编译时错误不匹配,但肯定会有一个好的IDE会警告你。

答案 2 :(得分:0)

您的抽象级别是错误的。

您不应在交换机内拨打getRangedInt()。相反,你应该有一个名为getNumberOfDays()的方法,它接受一个选择一个月的输入(可能是一个字符串,如"一月和#34;,"二月和#34;或一个int,或者一个枚举)。第二种方法可以使用其中的开关;但你不应该在其他任何地方切换。推理:关于一个月内有多少人的知识应该只在一个地方。在您的解决方案中,您需要在每个地方处理相同的开关,每月处理一次"天。#34;。导致代码重复,应该不惜一切代价避免。

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