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);
}
我不知道你生成车牌的算法是否正确,但有两点:
- 您的代码中有一个拼写错误,您两次检查年份是否为“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;
}
最简单、最明显的方法是使用嵌套的 switch 语句。
switch (month) {
…
case "08":
switch (year) {
case "15":
…
}
break;
…
}
我不是开发人员,但我知道应该有更好的方法来执行以下操作。我不太熟悉 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);
}
我不知道你生成车牌的算法是否正确,但有两点:
- 您的代码中有一个拼写错误,您两次检查年份是否为“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;
}
最简单、最明显的方法是使用嵌套的 switch 语句。
switch (month) {
…
case "08":
switch (year) {
case "15":
…
}
break;
…
}