Java 我们怎样才能从4个内循环出去?

Java 我们怎样才能从4个内循环出去?,java,for-loop,label,break,labelled-break,Java,For Loop,Label,Break,Labelled Break,嗨 我是java初学者,我的程序有4个for循环: 我的程序是这样工作的,如果b是true,元素将从点列表中删除,n将是n--,我想从所有for循环中退出,然后从第一个for循环中再次出现,因此l将是l++,我该怎么做?用break语句 for (int l = 0; l < n; l++) { for (int i = 1; i < (n - 2); i++) { for (int j = i + 1; j < (n - 1); j++) {

嗨 我是java初学者,我的程序有4个for循环: 我的程序是这样工作的,如果
b
true
,元素将从点列表中删除,
n
将是
n--
,我想从所有for循环中退出,然后从第一个for循环中再次出现,因此
l
将是
l++
,我该怎么做?用break语句

for (int l = 0; l < n; l++) {
  for (int i = 1; i < (n - 2); i++) {
      for (int j = i + 1; j < (n - 1); j++) {
          for (int k = j + 1; k < n; k++) {
              if (l != i && l != j && l != k) {
                  boolean b = isOK(pointList.get(l), pointList.get(i), pointList.get(j), pointList.get(k));
                  System.out.println(b);
                  if (b == true) {
                      pointList.remove(pointList.get(l);
                      n--;
                      break;
                  }
                  else
                      System.out.println(b);
              }
           }
       }
    }
}
for(int l=0;l
查看标记的break语句


例如,此处:

您可以将标记的中断用作:

      for (int l = 0; l < n; l++) {
 foo:    for (int i = 1; i < (n - 2); i++) {
            for (int j = i + 1; j < (n - 1); j++) {
                for (int k = j + 1; k < n; k++) {
                    if (l != i && l != j && l != k) {
                        boolean b = isOK(pointList.get(l), pointList.get(i), pointList.get(j), pointList.get(k));
                        System.out.println(b);
                        if (b == true) {
                            pointList.remove(pointList.get(l);
                            n--;
                            break foo;
                        }
                        else
                            System.out.println(b);
                    }

                }

            }
        }
    }
for(int l=0;l
第一个“快速且肮脏”的解决方案是使用
stay\u into\u循环
变量,并修改
循环的
,如:

 boolean stay_into_loops = true
 // here goes the first for loop
 for (int i = 1; i < (n - 2) && stay_into_loops ; i++) {
            for (int j = i + 1; j < (n - 1) && stay_into_loops ; j++) {
                for (int k = j + 1; k < n && stay_into_loops ; k++) {
                    if (l != i && l != j && l != k) {
                        boolean b = isOK(pointList.get(l), `pointList.get(i), pointList.get(j), pointList.get(k));`
                        System.out.println(b);
                        if (b == true) {
                            pointList.remove(pointList.get(l);
                            n--;
                            stay_into_loops = false;
                            break;
boolean stay\u into\u loops=true
//这是第一个for循环
对于(int i=1;i<(n-2)和&stay_-in_循环;i++){
对于(int j=i+1;j<(n-1)和&stay_-in_循环;j++){
for(int k=j+1;k

但是,当遇到这样的事情时,通常是代码的气味。考虑重构代码,因为在某个时候它会升级成一个混乱。

在循环中,<代码>中断>代码>语句终止内部循环,而<代码>继续<代码>跳转到下一个迭代。t循环到您需要使用的内部循环。类似这样的方法应该可以工作:

outerloop:      
        for (int l = 0; l < n; l++) {
            for (int i = 1; i < (n - 2); i++) {
                for (int j = i + 1; j < (n - 1); j++) {
                    for (int k = j + 1; k < n; k++) {
                        if (l != i && l != j && l != k) {
                            boolean b = isOK(pointList.get(l), pointList.get(i), pointList.get(j), pointList.get(k));
                            System.out.println(b);
                            if (b == true) {
                                pointList.remove(pointList.get(l);
                                n--;
                                continue outerloop;
                            }
                            else
                                System.out.println(b);
                        }

                    }

                }
            }
        }
outerloop:
对于(int l=0;l
使用带标签的循环

for (int l = 0; l < n; l++) {
    loopa:
    for (int i = 1; i < (n - 2); i++) {
        for (int j = i + 1; j < (n - 1); j++) {
            for (int k = j + 1; k < n; k++) {
                if (l != i && l != j && l != k) {
                    boolean b = isOK(pointList.get(l), pointList.get(i), pointList.get(j), pointList.get(k));
                    System.out.println(b);
                    if (b == true) {
                        pointList.remove(pointList.get(l);
                        n--;
                        break loopa;
                    }
                    else
                        System.out.println(b);
                }

            }

        }
    }
}
for(int l=0;l

然后从标记的循环中断

在每个内部for循环中为自己创建一个出口。
for (int l = 0; l < n; l++) {
    loopa:
    for (int i = 1; i < (n - 2); i++) {
        for (int j = i + 1; j < (n - 1); j++) {
            for (int k = j + 1; k < n; k++) {
                if (l != i && l != j && l != k) {
                    boolean b = isOK(pointList.get(l), pointList.get(i), pointList.get(j), pointList.get(k));
                    System.out.println(b);
                    if (b == true) {
                        pointList.remove(pointList.get(l);
                        n--;
                        break loopa;
                    }
                    else
                        System.out.println(b);
                }

            }

        }
    }
}
这里有一个快速无痛的解决方案

  bool breakout;
  for (int l = 0; l < n; l++) 
  {
        breakout = false;
        for (int i = 1; i < (n - 2) && !breakout; i++)
            for (int j = i + 1; j < (n - 1) && !breakout; j++)
                for (int k = j + 1; k < n && !breakout; k++)
                {
                    if(b == true)
                        breakout = true;                            
                }
  }
bool突破;
对于(int l=0;l
因此,您可以看到
breakout
布尔值是每个内部循环的票证,因为它在每个
声明中都会被检查。
每次
的第一个
迭代时,它都会被重置。

再次:
again:
for (int l = 0; l < n; l++) {
        for (int i = 1; i < (n - 2); i++) {
            for (int j = i + 1; j < (n - 1); j++) {
                for (int k = j + 1; k < n; k++) {
                    if (l != i && l != j && l != k) {
                        boolean b = isOK(pointList.get(l), pointList.get(i),  pointList.get(j), pointList.get(k));
                        System.out.println(b);
                        if (b == true) {
                            pointList.remove(pointList.get(l);
                            n--;
                            break again;
                        }
                        else
                            System.out.println(b);
                    }

                }

            }
        }
    }
对于(int l=0;l