显示次要矩阵3 x 3

时间:2012-12-17 09:41:09

标签: java matrix

我想显示矩阵的次要内容。 首先,我有一个矩阵3 x 3。

  

1 2 3

     

4 5 6

     

7 8 9

我想显示M11(删除第1行和第1列),所以它就像

  

1 3

     

7 9

但是通过我的程序,我得到了类似的东西

  

1 2

     

4 0

这是我的代码:

    public static double [][] Minor (double [][] M, int bar, int kol, int maxidx){
        double [][] minor = new double [2][2];
        int mini=0, minj=0;
        for (int i=0; i<2;i++){
            for (int j=0;j<2;j++){
                if (i!=bar | j!=kol){
                    minor[mini][minj]=M[i][j];
                    minj++;
                    if (minj==(maxidx-1)){
                        mini++;
                        minj=0;
                    }
                }
            }
        }
        return minor;
    }

为了显示未成年人,我使用了这段代码:

for (int i=0;i<2;i++){
    for (int j=0;j<2;j++){
        System.out.print(Minor(M,1,1,3)[i][j]+" ");
    }
        System.out.println();
}

我的代码出了什么问题?

5 个答案:

答案 0 :(得分:0)

我认为if (i!=bar | j!=kol){是个问题。你应该使用|| (逻辑或)

答案 1 :(得分:0)

 if (i!=bar | j!=kol)

这个|是按位运算符而不是逻辑运算符 但是,你的整个逻辑是错误的

这样做

for (int i=0; i<=2;i++){
         if(i!=bar)
         {
            for (int j=0;j<=2;j++){
                if (j!=kol){
                    minor[mini][minj]=M[i][j];
                    minj++;
                    }
                }
            mini++;
         }
       }
 }

答案 2 :(得分:0)

您正在使用按位OR,您应该使用逻辑AND

            if (i!=bar && j!=kol){
                       ^^

现在你只是在barkol的交叉处跳过元素。相反,您希望跳过整个bar行和整个kol列。

答案 3 :(得分:0)

正如评论中所说的那样,在3x3矩阵中循环只是为了将数字选择为2x2听起来有点过分。

/** ?skip : which is the first row/column we should keep (0/1)
 ** ?last : shall we skip the last item of the row/column.
 **/

public static double [][] MyMinor (double [][] M, int vskip, int vlast, int hskip, int hlast){
    double [][] minor = new double [2][2];
    int mini=0, minj=0;
    minor[0][0]=M[vskip][hskip];
    minor[0][1]=M[vskip][2-hlast];
    minor[1][0]=M[2-vlast][hskip];
    minor[1][1]=M[2-vlast][2-hlast];

    return minor;
}

// to remove any bar/kol combo:
MyMinor(input,bar==0?1:0,bar==2?1:0,kol==0?1:0,kol==2?1:0);

答案 4 :(得分:0)

首先,如果我们尝试删除中间行和列,我认为您的预期结果将是:

1 3

7 9

那么我会说这是你要找的代码:

public static double [][] Minor (double [][] M, int bar, int kol, int maxidx){
    double [][] minor = new double [2][2];
    int mini=0, minj=0;
    for (int i=0; i<3;i++){
        for (int j=0;j<3;j++){
            if (i!=bar && j!=kol){
                minor[mini][minj]=M[i][j];
                minj++;
                if (minj==(maxidx-1)){
                    mini++;
                    minj=0;
                }
            }
        }
    }
    return minor;
}

问题在于for循环:for(int i = 0; i&lt; 2; i ++)和for(int j = 0; j&lt; 2; j ++)。正如您所看到的,它永远不会达到M中的第3行和第3列,因此您将无法获得预期的结果。还有你的代码

if(i!= bar | j!= kol)

应替换为

if(i!= bar&amp;&amp; j!= kol),因为您不需要“bar”行和“kol”列中的任何元素。