Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果第一个“如果条件”为真,如何停止其他“如果条件”的执行_Java_Android_For Loop_If Statement - Fatal编程技术网

Java 如果第一个“如果条件”为真,如何停止其他“如果条件”的执行

Java 如果第一个“如果条件”为真,如何停止其他“如果条件”的执行,java,android,for-loop,if-statement,Java,Android,For Loop,If Statement,这已经困扰了我一天了,我不知道该怎么做,因为我还是java和android新手。我的代码在for循环中有if和elseif语句。现在的问题是,如果第一个条件为真,它也会在第一个条件下执行另一个条件,这不是我想要的。当上述条件为真时,我想停止循环并退出它 谁能告诉我出了什么问题吗 for(findpet_getItems items:arrayList) { for(int i=0; i <arrayList.size();i++)

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

谁能告诉我出了什么问题吗

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

您应该添加一些标签:

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

        }
    }

和results.setTextSearch未找到;应该移出这些循环

尝试使用早期返回。通常情况下,这种模式是

method() {
    if (condition) { block1; }
    else if (condition2) { block2; }
    else { block3; }
    return;
}
尝试使用提前返回,使示例看起来更像:

method() {
  if(condition) { block1; return; }
  if(condition2) { block2; return; }
  block3; return; 
}
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;
        }
    }

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

这是说如果我不是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;
                }
因此,它是反向的,将逻辑更改为更类似于:

method() {
  if(condition) { block1; return; }
  if(condition2) { block2; return; }
  block3; return; 
}
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;
        }
    }

在这种情况下,如果要中断循环,可以使用:

break;
continue;
比如:

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

break;
continue;
比如:

你会从中看到更多:或者


我希望能帮助你

第一件事:现在就做一个句号。而不是试图同时学习两个复杂的东西java和android!您应该首先关注基本java。然后:避免编写这样的代码-它已经过于复杂了。。。我们可以坐下来,花一个小时左右的时间讨论如何改进这个复杂的代码。但这并不是它的本意。因此:首先问问自己,为什么这里有两个循环,外部循环似乎足够了,为什么引入了内部循环。。。但永远不要使用那个参数?!不,OP应该退后一步,考虑他真正想要做的事情。可能标记的循环/中断会修复该症状。但问题是,他很可能不知道自己在做什么,也不知道如何以理智的方式去做。所以是的,你的答案在某种程度上解决了直接的问题-但它完全忽略了OP很好的部分,不知道他在做什么。是的,他应该首先理解这个问题,我不确定在这个问题中提出的示例代码。但如果他需要一个停止的方法,那么就在这里。这就是重点:我们不知道他想要什么。当问题质量不高时,你的答案应该非常清晰,以弥补这一点。。。