如何通过传递一个整数来实现一个返回字符串的方法,而不需要很多if语句?

时间:2015-08-12 11:49:40

标签: java if-statement simplify

我需要一些建议。我有这样的方法:

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
}
等等......我有10个这样的陈述,老实说我不知道​​如何简化这个。我期待在网上找到如何做到这一点,但似乎我的搜索没有准确,所以如果我可以有一些建议!

6 个答案:

答案 0 :(得分:6)

如果您的方法是按照显示的方式构建的,并且值是预定义的,那么您也可以使用数组;

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";
}

编辑:确保输出在范围内

答案 1 :(得分:5)

如果您可以在数字和问候语之间进行预定义的映射,则可以执行以下操作:

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";
    }
}

答案 2 :(得分:2)

switch案例是您的最佳选择,而不是多个if。去吧。

答案 3 :(得分:2)

根据具体情况,使用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");
}

答案 4 :(得分:1)

首先......清理代码,格式化并使用正确的表示法。

之后,使用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 
}

答案 5 :(得分:1)

各种选择取决于表现/案件数量等。

如果

,简化您现有的结构以使用其他结构
    String l_myString = "Hello";
    if (a_var == 1) {
        l_myString = "Hi";
    } else if (a_var == 2) {
        l_myString = "Hey";
    }
    return l_myString;

使用案例陈述

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