我想显示矩阵的次要内容。 首先,我有一个矩阵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();
}
我的代码出了什么问题?
答案 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){
^^
现在你只是在bar
和kol
的交叉处跳过元素。相反,您希望跳过整个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”列中的任何元素。