如何通过传递整数来实现 returns 字符串的方法,而无需大量 if 语句?
How can I implement a method which returns a string by passing an integer, without having lot of if statements?
我需要一些建议。我有这样的方法:
Private String myMethod(int a_var) {
String l_myString = "Hello";
if (a_var == 1) {
l_myString = "Hi";
}
if (a_var == 2) {
l_myString = "Hey";
}
return l_myString
}
等等...我有十个这样的 if 语句,老实说我不知道如何简化它。我本来想在网上找到如何做到这一点,但我的搜索似乎不够准确,所以如果我能得到一些建议!
一个 switch 案例比多个 if
案例更适合您。去吧。
如果您可以在数字和问候语之间进行预定义映射,您可以:
public class Greeter {
private Map<Integer, String> mapping = new TreeMap<Integer, String>() {{
put(1, "Hi");
put(2, "Hey");
}};
public String myMethod(int number) {
String greet = mapping.get(number);
return mapping != null ? mapping : "Hello";
}
}
首先...清理你的代码,格式化它并使用正确的符号。
之后,使用switch()
private String myMethod(int aVar) {
String myString;
switch(aVar) {
case 1:
myString = "Hi";
break;
case 2:
myString = "Hey";
break;
default:
myString = "Hello";
break;
}
return myString
}
如果您的方法是按照显示的方式构建的,并且值是预定义的,那么您也可以使用数组;
final static String[] output = {"Hey", "Ho", "Hallo", "Hi"};
...
public String method(int input) {
return input-1 >= 0 && input-1 < output.length ? output[input-1] : "hello";
}
编辑:确保输出在范围内
根据上下文使用 switch
或映射(仅当输出为 常量 时):
开关
switch (a_var) {
case 1: return "Hey";
case 2: return "Hi";
...
default: return "Hello";
}
地图 :
// somewhere in the class
private static final Map<Integer, String> SOME_NAME = new HashMap<>();
static {
SOME_NAME.put(1, "Hey");
SOME_NAME.put(2, "Hi");
}
private String myMethod(int a_var) {
return SOME_NAME.getOrDefault(a_var, "Hello");
}
根据性能/案例数量等的不同选择
简化现有结构以使用 else if
String l_myString = "Hello";
if (a_var == 1) {
l_myString = "Hi";
} else if (a_var == 2) {
l_myString = "Hey";
}
return l_myString;
使用 case 语句
String l_myString;
switch (a_var) {
case 1:
l_myString = "Hi";
break;
case 2:
l_myString = "Hey";
break;
default:
l_myString = "Hello";
break;
}
return l_myString;
使用某种查找,例如一个数组。
private static final String[] RESULTS = new String[] { "Hi", "Hey" };
private String arrayCache(int a_var) {
return a_var >= 1 && a_var <= RESULTS.length ? RESULTS[a_var - 1] : "Hello";
}
在配置文件中从外部定义您的值
private class Greeting {
private Properties properties;
public Greeting() throws IOException {
properties = new Properties();
properties.load(getClass().getResourceAsStream("config.properties"));
}
public String myMethod(int a_var) {
String l_myString = properties.getProperty("value." + a_var);
if (l_myString == null) {
l_myString = properties.getProperty("default");
}
return l_myString;
}
}
config.properties
default=Hello
value.1=Hi
value.2=Hey
我需要一些建议。我有这样的方法:
Private String myMethod(int a_var) {
String l_myString = "Hello";
if (a_var == 1) {
l_myString = "Hi";
}
if (a_var == 2) {
l_myString = "Hey";
}
return l_myString
}
等等...我有十个这样的 if 语句,老实说我不知道如何简化它。我本来想在网上找到如何做到这一点,但我的搜索似乎不够准确,所以如果我能得到一些建议!
一个 switch 案例比多个 if
案例更适合您。去吧。
如果您可以在数字和问候语之间进行预定义映射,您可以:
public class Greeter {
private Map<Integer, String> mapping = new TreeMap<Integer, String>() {{
put(1, "Hi");
put(2, "Hey");
}};
public String myMethod(int number) {
String greet = mapping.get(number);
return mapping != null ? mapping : "Hello";
}
}
首先...清理你的代码,格式化它并使用正确的符号。
之后,使用switch()
private String myMethod(int aVar) {
String myString;
switch(aVar) {
case 1:
myString = "Hi";
break;
case 2:
myString = "Hey";
break;
default:
myString = "Hello";
break;
}
return myString
}
如果您的方法是按照显示的方式构建的,并且值是预定义的,那么您也可以使用数组;
final static String[] output = {"Hey", "Ho", "Hallo", "Hi"};
...
public String method(int input) {
return input-1 >= 0 && input-1 < output.length ? output[input-1] : "hello";
}
编辑:确保输出在范围内
根据上下文使用 switch
或映射(仅当输出为 常量 时):
开关
switch (a_var) {
case 1: return "Hey";
case 2: return "Hi";
...
default: return "Hello";
}
地图 :
// somewhere in the class
private static final Map<Integer, String> SOME_NAME = new HashMap<>();
static {
SOME_NAME.put(1, "Hey");
SOME_NAME.put(2, "Hi");
}
private String myMethod(int a_var) {
return SOME_NAME.getOrDefault(a_var, "Hello");
}
根据性能/案例数量等的不同选择
简化现有结构以使用 else if
String l_myString = "Hello";
if (a_var == 1) {
l_myString = "Hi";
} else if (a_var == 2) {
l_myString = "Hey";
}
return l_myString;
使用 case 语句
String l_myString;
switch (a_var) {
case 1:
l_myString = "Hi";
break;
case 2:
l_myString = "Hey";
break;
default:
l_myString = "Hello";
break;
}
return l_myString;
使用某种查找,例如一个数组。
private static final String[] RESULTS = new String[] { "Hi", "Hey" };
private String arrayCache(int a_var) {
return a_var >= 1 && a_var <= RESULTS.length ? RESULTS[a_var - 1] : "Hello";
}
在配置文件中从外部定义您的值
private class Greeting {
private Properties properties;
public Greeting() throws IOException {
properties = new Properties();
properties.load(getClass().getResourceAsStream("config.properties"));
}
public String myMethod(int a_var) {
String l_myString = properties.getProperty("value." + a_var);
if (l_myString == null) {
l_myString = properties.getProperty("default");
}
return l_myString;
}
}
config.properties
default=Hello
value.1=Hi
value.2=Hey