【问题标题】:Is it possible in java to simplify the following if-statement?是否可以在 java 中简化以下 if 语句?
【发布时间】:2022-06-13 12:55:07
【问题描述】:

我想简化这个 if 语句并防止写三遍“!='*'”。有可能吗?

if (i != '*' && j != '*' && k != '*')

【问题讨论】:

  • !Arrays.asList(i, j, k).contains('*')
  • !("" + i + j + k).contains("*")
  • 任何“简化”,例如答案中的那些,都会变得更慢,更难理解。你已经拥有的没有什么问题。
  • 这些建议将原始值的简单快速比较转换为具有内存分配的对象构造,然后进行线性搜索。

标签: java


【解决方案1】:
  1. 使用数组:将所有元素放入数组,遍历数组判断。
List<String> list = new LinkedList<>(Arrays.asList(i,j,k));
if(list.stream().noneMatch("*"::equals)){

}else{

}
  1. 使用字符串:将元素拼接成字符串
String temp = i+j+k;
if(temp.contains("*")){
}

【讨论】:

    【解决方案2】:

    是的,可以省略写!='*' 3 次,但方法仍然会更长。我建议使用您在问题中编写的方法,但如果您真的想尝试其他方法(可能出于好奇),您可以这样做:

    char ch[] = {i,j,k};    /*I hope the variables i,j,k in question are char type*/
    boolean flag = false;
    for(int t = 0; t < ch.length; t++){
        if(ch[t] != '*')
            flag = true;
        else{
            flag = false;
            break;
        }
    }
    if(flag){
        //Tasks to do...
    }
    

    写这么多是一项乏味的工作。因此,if (i != '*' &amp;&amp; j != '*' &amp;&amp; k != '*') 是最优化的。所以我会推荐使用它。

    【讨论】:

      【解决方案3】:

      我想简化这个 if-Statement 并防止写三遍 "!='*'"。

      这是一个简化可读性和意图的解决方案。

      首先,创建一个简单、明显且名称清晰的方法(奖励:这很容易编写单元测试):

      private static boolean isValid(char i) {
          return i != '*';
      }
      

      然后在您的调用代码中执行以下操作:

      if (isValid(i) && isValid(j) && isValid(k)) {
          // do things if all are valid
      }
      

      您可以通过创建一个检查isValid() 的字符数组的方法来进一步提高可读性:

      private static boolean allAreValid(char[] chars) {
          for (char ch : chars) {
              if (!isValid(ch)) {
                  return false;
              }
          }
          return true;
      }
      

      然后您的调用代码变得非常清晰,不仅是步骤,而且意图 - 仅当字符全部有效时才继续执行 if 语句的主体。

      char[] chars = {i, j, k};
      if (allAreValid(chars)) {
          // do things if all are valid
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-20
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2012-10-10
        相关资源
        最近更新 更多