用很多||编写if语句的更好方法

时间:2015-05-08 11:23:35

标签: java if-statement

我想知道是否有更优雅的方法来编写带有大量||的if语句在java中。 我给字母字母赋予了不同的值:

A,O,I,B,T,S,M,N -> 1 
C,D,F,G         -> 5 
W,Y,Z,H,Q       -> 10

所以,我想检查一个给定的字母,如果等于第二组中的一个,例如得到5。 现在我正在这样检查:

String value;
if (getLetter().equals("Α")|| getLetter().equals("O") ||
    getLetter().equals("I") || getLetter().equals("B") ||
    getLetter().equals("T") || getLetter().equals("S") ||
    getLetter().equals("N") || getLetter().equals("N"))
value = "1";

有更好的方法吗?

3 个答案:

答案 0 :(得分:7)

三个选项:

  • 使用switch语句,假设您使用的是Java 7或8:

    switch (getLetter()) {
        case "A":
        case "O":
        case "I":
        case "B":
        ...
            value = "1";
        ...
    }
    
  • 使用三个Set<String>个对象

  • (Best,IMO)使用Map<String, String>

最后一个选项是:

// You'd presumably initialize this in one place...
Map<String, String> map = new HashMap();
map.put("A", "1");
map.put("O", "1");
map.put("I", "1");
...
map.put("C", "5");
map.put("D", "5");
...

String value = map.get(getLetter());

答案 1 :(得分:6)

String letter = getLetter();
if ("AOIBTSMN".contains(letter)) 
    value = "1"; 
else if ("CDFG".contains(letter))
    value = "5";
else if ("WYZHQ".contains(letter))
    value = "10";

不是最佳,而是简短,清晰和自我解释。

答案 2 :(得分:1)

您可以为您的目的创建 HashMap

HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("A",1);
hm.put("B",1);
hm.put("O",1);
hm.put("I",1);
....
hm.put("C",5);
hm.put("D",5);
...

在提取时,您不需要 if condition

int value = hm.get("A");  // Will return 1