Java Switch 语句中的多个变量

Multiple variables in a Java Switch statement

我不是开发人员,但我知道应该有更好的方法来执行以下操作。我不太熟悉 lambda 表达式,但很高兴看到更好的方法。

我需要设置英国车牌。每年车牌的第 3 位和第 4 位可以有 2 个值之一: 例如:01/03/2017-31/08/2017 将有“17”,例如AE17GHS 而 01/09/2017-28/02/2018 将有 '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);
    }

我不知道你生成车牌的算法是否正确,但有两点:

  1. 您的代码中有一个拼写错误,您两次检查年份是否为“18”。
  2. 你可以这样改写:
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;
}

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

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