如何简化此代码?我怀疑我的函数中有两个switch语句。
private String getKeyword(String id) {
String keyword = "";
switch (id.substring(1, 2)) {
case "E":
keyword = "英語";
break;
case "M":
keyword = "数学";
break;
case "W":
keyword = "統合";
break;
}
switch (id.substring(4,5)){
case "W":
keyword = "統合";
break;
}
return keyword;
}
答案 0 :(得分:2)
您只能使用if else if
语句
它会不那么冗长。
此外,前一个和最后一个条件有相似之处
因此,您可以将它们与OR运算符组合在一个语句中。
两者都返回"統合"
。
最后,您可以直接返回值,而不是在每个匹配的情况下对局部变量进行估值
但是当第二个switch语句覆盖返回的值时,
你应该把它作为第一个测试条件。
它会让事情变得更加清晰:
private String getKeyword(String id) {
char c = id.substring(1, 2).charAt(0);
if (c == 'W' || id.substring(4,5).charAt(0) == 'W'){
return "統合";
}
else if (c == 'E'){
return "英語";
}
else if (c == 'M'){
return "数学";
}
return "";
}
答案 1 :(得分:1)
您可以使用枚举。 它们中的每一个都包含一个或多个id以及相应的关键字:更易于阅读和维护。 最后,在Enumeration中声明一个静态方法,以根据提供的id检索预期的元素。
答案 2 :(得分:1)
private String getKeyword(String id) {
String keyword = "";
switch (id.substring(1, 2)) {
case "E":
keyword = "英語";
break;
case "M":
keyword = "数学";
break;
case "W":
keyword = "統合";
break;
}
if ("W".equals(id.substring(4, 5))) keyword = "統合";
return keyword;
}
答案 3 :(得分:1)
您可以制作关键字地图并使用它。由于这是静态的,您可以将此映射设置为实例变量,并在调用该方法时使用它。
//do this in something like a constructor
Map<String, String> keywordMap = new HashMap<>;
keywordMap.put("E", "英語");
//more put calls
//and in your method, you'll only need
return keywordMap.get(id.substring(1, 2));
注意使用两个switch
实现的逻辑。由于第一个开关中的匹配不会导致方法返回,因此第二个开关中的匹配可以覆盖关键字变量。
答案 4 :(得分:1)
使用地图:
private static final Map<String, String> letterToKeyword =
Map.of("E", "英語", "M", "数学", "W", "統合");
private String getKeyword(String id) {
if (id.substring(4,5).equals("W")) return "統合";
return letterToKeyword.getOrDefault(id.substring(1, 2), "");
}
在Java 9构建之前,地图会更加冗长(如果需要,可以使用辅助方法辅助):
private static final Map<String, String> letterToKeyword;
static {
Map<String, String> map = new HashMap<>();
map.put("E", "英語");
map.put("M", "数学");
map.put("W", "統合");
letterToKeyword = Collections.unmodifiableMap(map);
}
答案 5 :(得分:0)
您可以在单独的功能中移动开关的主体。
如果你想缩短它,你也可以删除中断并立即返回。
您也可以使用枚举
您的一个开关可以用简单的if语句替换。
private String getKeyword(String id)
{
if(id.substring(4,5).equals("W"))
{
return "統合";
}
else
{
switch (id.substring(1, 2)) {
case "E":
return "英語";
case "M":
return "数学";
case "W":
return "統合";
}
}
return "";
}