【问题标题】:Better way to write if statement with a lot of ||用大量 || 编写 if 语句的更好方法
【发布时间】:2015-07-19 07:10:16
【问题描述】:

我想知道是否有更优雅的方式来编写包含大量 || 的 if 语句在爪哇。 我给字母表赋予了不同的值:

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

有没有更好的方法?

【问题讨论】:

  • 将所有元素(A、O、I 等)放在一个列表中并使用包含方法list.contains(getLetter())

标签: java if-statement


【解决方案1】:

三个选项:

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

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

  • (最佳,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());

【讨论】:

    【解决方案2】:
    String letter = getLetter();
    if ("AOIBTSMN".contains(letter)) 
        value = "1"; 
    else if ("CDFG".contains(letter))
        value = "5";
    else if ("WYZHQ".contains(letter))
        value = "10";
    

    不是最佳的,但简短、清晰且不言自明。

    【讨论】:

    • 哇,没想到这个角度,喜欢这个:)
    • 我也更喜欢这种方式,简单且代码更少。谢谢。
    【解决方案3】:

    您可以根据自己的目的创建一个 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 条件

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

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多