【问题标题】:How to stop other "else if conditions" from executing if 1st "if condition" is true如果第一个“if 条件”为真,如何阻止其他“else if 条件”执行
【发布时间】:2018-02-25 17:57:14
【问题描述】:

它已经困扰我一天了,我不知道该怎么做,因为我还是 java 和 android 的新手。我有这段代码,它在 for 循环中有一个 if 和 else if 语句。现在的问题是,如果第一个条件为真,它还将执行第一个以下的另一个条件,这不是我想要的。我想在上述条件为真时停止循环并退出。

谁能告诉我哪里出了问题。

for(findpet_getItems items:arrayList)
        {
            for(int i=0; i <arrayList.size();i++)
            {
                if(i !=0){
                    if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)
                            && items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)
                            ) {
                        new_list.add(items);
                        break;
                    }
                    else if (items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)) {
                        new_list.add(items);
                        break;
                    }

                    else if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)) {
                        new_list.add(items);
                        break;
                    }
                    else {
                        results.setText("Search not found");
                    }
                }
            }
        }

【问题讨论】:

  • 第一件事:现在做一个句号。不要试图同时学习两个复杂的东西(java 和 android!),你应该首先关注基本的 java。然后:避免编写这样的代码——它已经过于复杂了......我们可以坐下来讨论如何改进这个(抱歉)过于复杂的代码大约一个小时。但这不是 SO 的意义所在。因此:首先问自己为什么这里有 两个 循环(外部似乎就足够了)以及为什么引入内部循环......但永远不要使用那个 i 参数?!

标签: java android for-loop if-statement


【解决方案1】:

你应该添加一些标签:

outerloop:
for(findpet_getItems items:arrayList) {
        for(int i=0; i <arrayList.size();i++) {
            ...
                    break outerloop;
            ...

        }
    }

results.setText("Search not found"); 应该从这些循环中移出

【讨论】:

  • 没有。 OP应该退后一步,考虑他真正想做的事情。也许标记的循环/中断可以修复症状。但问题是他很可能不知道自己在做什么,也不知道如何以“理智”的方式做到这一点。所以是的,你的回答以某种方式解决了直接问题 - 但它完全忽略了 OP 很好的部分,不知道他在做什么。
  • 是的,他应该首先理解问题,我不确定这个问题中示例代码的建议。但如果他需要停下来,那就来吧。
  • 这就是重点:我们不知道他想要什么。当问题质量不高时,您的答案应该非常清楚以弥补这一点......
【解决方案2】:

尝试使用提前退货。通常模式会是

method() {
    if (condition) { block1; }
    else if (condition2) { block2; }
    else { block3; }
    return;
}

尝试使用提前返回,这样示例看起来更像:

method() {
  if(condition) { block1; return; }
  if(condition2) { block2; return; }
  block3; return; 
}

【讨论】:

    【解决方案3】:

    这是因为你的逻辑看起来是错误的:

    这是说明如果我不为 0 则执行此操作,elf 等。

    但是,看看这里的逻辑:

    for(**int i=0**; i <arrayList.size();i++)
            {
                i**f(i !=0**){
                    if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)
                            && items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)
                            ) 
                    {
                        new_list.add(items);
                        break;
                    }
    

    在循环的第一次迭代中我将永远为 0,所以不会执行任何操作,然后它变为 1,因此 if 变为 true,然后顺流向下:

    if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)
                            && items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)
                            ) 
                    {
                        new_list.add(items);
                        break;
                    }
                    else if (items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)) {
                        new_list.add(items);
                        break;
                    }
    
                    else if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)) {
                        new_list.add(items);
                        break;
                    }
                    else {
                        results.setText("Search not found");
                    }
                }
    

    因此,它倒退,将逻辑更改为更像:

    or(findpet_getItems items:arrayList)
        {
            for(int i=0; i <arrayList.size();i++)
            {
                if(i =0){
                    if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)
                            && items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)
                            ) 
                    {
                        new_list.add(items);
                        break;
                    }
                    else if (items.getSize().toLowerCase().contains(size) && items.getWeight().toLowerCase().contains(weight)) {
                        new_list.add(items);
                        break;
                    }
    
                    else if (items.getHair().toLowerCase().contains(hair) && items.getColor().toLowerCase().contains(color)) {
                        new_list.add(items);
                        break;
                    }
                    else {
                        results.setText("Search not found");
                    }
                }else break;
            }
        }
    

    【讨论】:

      【解决方案4】:

      如果你想打破循环,你可以使用:

      break;
      

      喜欢:

      if(true) break;
      

      或者如果你想跳转de条件并继续循环,你可以使用:

      continue;
      

      喜欢:

      if(true) continue;
      

      您会在以下位置看到更多信息:Difference between break and continue statement 或 https://www.geeksforgeeks.org/decision-making-javaif-else-switch-break-continue-jump/

      希望能帮到你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        相关资源
        最近更新 更多