如果/ Else替代方案

ect*_*n84 2 java if-statement

public boolean typeMatch(char c1, char c2) {

    if (c1 == '{' || c1 == '}') {
        return (c2 == '{' || c2 == '}');
    } else if (c1 == '(' || c1 == ')') {
        return (c2 == '(' || c2 == ')');
    } else if (c1 == '[' || c1 == ']') {
        return (c2 == '[' || c2 == ']');
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在我的程序中有上面的代码,我想知道是否有更好的方法来实现这个方法而不使用大量的if/else语句.

Ell*_*sch 5

字符数组中的字符对

您可以将符号对(打开和关闭)提取到a中char[][],然后遍历该数组以测试匹配.就像是,

static final char[][] pairs = { { '{', '}' }, { '(', ')' }, { '[', ']' } };

public boolean typeMatch(char c1, char c2) {
    for (char[] pair : pairs) {
        if (c1 == pair[0] || c1 == pair[1]) {
            return c2 == pair[0] || c2 == pair[1];
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

字符串数组中的字符对

或者,如果我们用(s)和2实现它,可能更容易阅读1.就像是,StringString.indexOf(int)

public boolean typeMatch(char c1, char c2) {
    String[] pairs = { "{}", "()", "[]" };
    for (String pair : pairs) {
        if (pair.indexOf(c1) != -1) {
            return pair.indexOf(c2) != -1;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

1 这绝不是坏事.
2 链接的Javadoc部分地说,在这两种情况下,如果此字符串中没有出现这样的字符,则-1返回.