for循环,如果满足条件,停止搜索,增加索引并再次启动循环

vojdkbi0  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(377)

我试图搜索二维数组/矩阵(布尔值)上的列,以找到全部为false的列,然后返回该列的索引。

public int top() {       
       for (int j = 0; j < size; j++) { 
           for (int i = 0; i < size; i++) {     
               System.out.println("index i: "+ i+" index j:"+j);                
               if (matrix[i][j]==true) {
                   j++;
               }
           }
           return j;
      }
      System.out.println("failed");
      return -1;
   }

当检测到“true”值时,我想跳出嵌套for循环,并在下一列的顶部再次开始搜索。现在,当检测到一个真值时,该列将递增,它将继续搜索最后一个关闭的下一列,而不是我希望的开始。
有没有办法检测for循环中的某个内容,更改索引,然后重新启动搜索?

v2g6jxz6

v2g6jxz61#

你可以使用 while 循环到仅循环如果 matrix[i][j] 是假的。然后在检查一列之后,如果它到达末尾,则返回列索引。

public int top() {
    for (int j = 0; j < size; j++) { 
        int i = 0;
        while(i < size && !matrix[i][j]){
            System.out.println("index i: "+ i+" index j:"+j);
            i++;
        }
        if(i == size){
            return j;
        }
     }
     System.out.println("failed");
     return -1;
}
zbq4xfa0

zbq4xfa02#

是的,你可以用 continue 并为此命名了循环。
注意每个循环是如何用一个自我解释的名称命名的,这使得编写所需的算法变得很容易

public int top() {
    COLUMNS_LOOP:
    for (int j = 0; j < size; j++) {
        ROWS_LOOP:
        for (int i = 0; i < size; i++) {
            System.out.println("index i: " + i + " index j:" + j);
            if (matrix[i][j]) {
                continue COLUMNS_LOOP;
            }
        }
        return j;
    }
    System.out.println("failed");
    return -1;
}
xlpyo6sf

xlpyo6sf3#

公共int top(){

for (int j = 0; j < size; j++) {
           boolean failed = false;
           for (int i = 0; i < size && !failed; i++) {      
               System.out.println("index i: "+ i+" index j:"+j);
                if (matrix[i][j]) {
                     failed = true;
                }
            }

            if (!failed) {
                return j;
            }
        }
    System.out.println("failed");
    return -1;
    }

我们将“failed”设置为tru,以防在列中得到1个“true”。然后,我们的内部for循环将停止处理。
如果我们没有找到“true”值,我们将迭代所有列,然后(因为“failed”是false)返回第一个全部为false的列

相关问题