java在二维矩阵中移动

java在二维矩阵中移动,java,multidimensional-array,Java,Multidimensional Array,我有一个二维数组int矩阵[numNodes][numArcs]。这是一个关联矩阵 现在,如果我们想添加一个弧,我们必须检查这些节点是否存在,而弧是否不存在。这部分很好用。我需要做的以下事情是找到一个空列来添加弧。因此,矩阵在开始时充满了零。所以它很简单,你搜索每一列,直到你找到一列充满零。听起来很简单,但它现在起作用了。该部分代码如下所示: outerloop: for (int i = 0; i < numArcs; i++){ for (int j =

我有一个二维数组int矩阵[numNodes][numArcs]。这是一个关联矩阵

现在,如果我们想添加一个弧,我们必须检查这些节点是否存在,而弧是否不存在。这部分很好用。我需要做的以下事情是找到一个空列来添加弧。因此,矩阵在开始时充满了零。所以它很简单,你搜索每一列,直到你找到一列充满零。听起来很简单,但它现在起作用了。该部分代码如下所示:

    outerloop:
    for (int i = 0; i < numArcs; i++){
        for (int j = 0; j < numNodes; j++){
            if (matriz[j][i] != 0)
                break;
                //It finds a number != 0 so it should move to the next column 

            //If it gets here, the whole column was full of zeros
            column = i; 
            key = true;
            break outerloop;
        }
    }
正如您所看到的,它只是检查每个列的第一个位置,而不是按照应该的方式进行。对我来说这毫无意义。在我的示例中,NumNode是10,所以它应该一直向下

编辑: 我的确切例子 矩阵如下所示:

 -1  -1 -1 0 0 0 ....
  0   1  0 0 0 ...
  0   0  1 0 0 .....
所以当它到达第四列时,它读取零并返回空列。 对于我添加的下n个弧,它也会执行相同的操作。我添加的以下圆弧不再接触第一行。
感谢您的帮助

让我试试看,我会让您知道,在使用
break
之前,您甚至可以检查循环内的条件:
boolean colEmpty=true;对于(int j=0;j@YanickRochon..是的,这也可以做到。但是,不会对性能造成太大影响。它仍然是一个有效的解决方案。@RohitJain,是的,它在循环条件中被检查:)只要
colEmpty
为false,它就会break@RohitJain,我之所以这么说,是因为
flag
对于变量名来说并不直观:)而且我坚信
break
在Java中是一个过时的关键字(除了
switch
,但作为一种OO语言,这些也是可以避免的)。让我试试看,不使用
break
,我会告诉你的,您甚至可以检查循环内的条件:
booleanColempty=true;对于(int j=0;j@YanickRochon..是的,这也可以做到。但是,不会对性能造成太大影响。它仍然是一个有效的解决方案。@RohitJain,是的,它在循环条件中被检查:)只要
colEmpty
为false,它就会break@RohitJain,我之所以这么说,是因为
flag
对于变量名来说并不直观:)而且我坚信
break
在Java中是一个过时的关键字(除了
switch
,但作为一种OO语言,这些也是可以避免的)是
matriz
类型的
double[]
有可能吗?您的
matriz
变量类型是否为
double[][]
有可能吗?
for (int i = 0; i < numArcs; i++){
    for (int j = 0; j < numNodes; j++){
        if (matriz[j][i] != 0)
            break;
            //It finds a number != 0 so it should move to the next column 

        //If it gets here, the whole column was full of zeros
        column = i; 
        key = true;
        break outerloop;
    }
}
for (int i = 0; i < numArcs; i++){
    for (int j = 0; j < numNodes; j++){
        if (matriz[j][i] != 0)
            break;
            //It finds a number != 0 so it should move to the next column 

        //If it gets here, the whole column was full of zeros
        column = i; 
        key = true;
        break outerloop;
    }
}
    int[][] matrix = new int[5][4];
    boolean columnEmpty = true;
    int column = 0;
    boolean key = false;

    matrix[0][0] = -1;
    matrix[0][1] = -1;
    matrix[1][1] = 1;
    matrix[1][2] = -1;
    matrix[2][2] = -1;

    outerloop: for (int i = 0; i < 5; i++){
            columnEmpty = true;
            for (int j = 0; j < 4; j++){
                if (matrix[j][i] != 0) {
                   columnEmpty = false;
                   break;
                }

            }
            if (columnEmpty) {
                // If we are here.. then flag was never set to `true`. 
                // So, all the rows for that column was Zero..
                column = i; 
                key = true;
                break outerloop;
            }

        }

    System.out.println("Column : " + column);