java switch语句中的多个变量

xzlaal3s  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(417)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我不是一个开发人员,但我知道应该有一个更好的方法来做以下。我不太熟悉lambda表达式,但很高兴能以更好的方式展示。
我需要设置一个英国车牌。每年车牌的第3位和第4位可以有两个值中的一个:例如:01/03/2017-31/08/2017将有“17”,例如。 AE17GHS 鉴于2017年9月1日至2018年2月28日将有“67”,例如。 AE67GHS ```
public void setVehiclePlateYear(StartDate startDate) {

   //Example parameter:
   //String startDate = "2017-06-17";

    String year = startDate.getStartDateString().substring(2, 4);
    String month = startDate.getStartDateString().substring(5, 7);

    switch (month) {
        case "03":
        case "04":
        case "05":
        case "06":
        case "07":
        case "08":
            if (year.equals("15"))
                vehiclePlateYear = "15";
            else if (year.equals("16"))
                vehiclePlateYear = "16";
            else if (year.equals("17"))
                vehiclePlateYear = "17";
            else if (year.equals("18"))
                vehiclePlateYear = "18";
            else if (year.equals("18"))
                vehiclePlateYear = "19";
            else if (year.equals("19"))
                vehiclePlateYear = "20";
            else if (year.equals("20"))
                vehiclePlateYear = "21";
            break;
        case "01":
        case "02":
        case "09":
        case "10":
        case "11":
        case "12":
            if (year.equals("15"))
                vehiclePlateYear = "64";
            else if (year.equals("16"))
                vehiclePlateYear = "65";
            else if (year.equals("17"))
                vehiclePlateYear = "66";
            else if (year.equals("18"))
                vehiclePlateYear = "67";
            else if (year.equals("19"))
                vehiclePlateYear = "69";
            else if (year.equals("20"))
                vehiclePlateYear = "70";
            else if (year.equals("21"))
                vehiclePlateYear = "71";
            break;
    }

    setPlateDate(vehiclePlateYear);
}
vsmadaxz

vsmadaxz1#

最简单和最明显的方法是使用嵌套的switch语句。

switch (month) {
          …
        case "08":
            switch (year) {
               case "15":
                 …
            }
            break;
          …
     }
wwwo4jvm

wwwo4jvm2#

我不知道你生成车牌的算法是否正确,但有两点:
你的代码中有一个输入错误,你检查年份是否是“18”两次。
你可以这样重写:

case "08": 
    int parsedYear = Integer.valueOf(year);  
    if (parsedYear >= 15 && parsedYear <= 21) {  
        vehiclePlateYear = parsedYear;  
    }

另外,我认为可以简化if语句的第二大块,如下所示:

int parsedYear = Integer.valueOf(year);
int base = 64;
int delta = parsedYear - 15;
if (parsedYear >= 15 && parsedYear <= 21) {
    vehiclePlateYear = base + delta;
}

相关问题