在Java中获取二维数组矩阵的行和列

10
假设我在Java中有一个像这样的二维数组(矩阵)...
int[][] MyMat = {{0,1,2,3,4}, {9,8,7,6,5}};

如果我想要提取列,可以像这样轻松地完成...
int[] My0= MyMat[0]; //My0 = {0,1,2,3,4}
int[] My1= MyMat[1]; //My1 = {9,8,7,6,5}

但是我该怎么提取行呢?...
int[] My_0= ?; //My_0 = {0,9}
int[] My_1= ?; //My_1 = {1,8}
int[] My_2= ?; //My_2 = {2,7}
int[] My_3= ?; //My_3 = {3,6}
int[] My_4= ?; //My_4 = {4,5}

有没有缩写可以实现这个?

1
你不能在一行代码中完成这个操作。你应该创建一个新的数组,并手动填充矩阵[column][row]的值,或者使用for循环来实现。 - Luiggi Mendoza
同意,除非您最初以这种方式定义矩阵或手动编码它,否则不可能。 - wattostudios
3个回答

5

如果你想获取行,需要从每个数组中获取值,然后从这些值创建一个新的数组。你可以手动分配这些值,或者使用 for 循环,例如:

int[][] MyMat = {{0,1,2,3,4}, {9,8,7,6,5}};

// get your columns... (easy)
int[] My0= MyMat[0]; //My0 = {0,1,2,3,4}
int[] My1= MyMat[1]; //My1 = {9,8,7,6,5}

// get the rows... (manually)
int[] My_0= new int[]{MyMat[0][0],MyMat[1][0]}; //My_0 = {0,9}
int[] My_1= new int[]{MyMat[0][1],MyMat[1][1]}; //My_1 = {1,8}
int[] My_2= new int[]{MyMat[0][2],MyMat[1][2]}; //My_2 = {2,7}
int[] My_3= new int[]{MyMat[0][3],MyMat[1][3]}; //My_3 = {3,6}
int[] My_4= new int[]{MyMat[0][4],MyMat[1][4]}; //My_4 = {4,5}

// get the rows... (as a for-loop)
int size = MyMat.length;
int[] My_0 = new int[size]; //My_0 = {0,9}
int[] My_1 = new int[size]; //My_1 = {1,8}
int[] My_2 = new int[size]; //My_2 = {2,7}
int[] My_3 = new int[size]; //My_3 = {3,6}
int[] My_4 = new int[size]; //My_4 = {4,5}
for (int i=0;i<size;i++){
    My_0[i] = MyMat[i][0];
    My_1[i] = MyMat[i][1];
    My_2[i] = MyMat[i][2];
    My_3[i] = MyMat[i][3];
    My_4[i] = MyMat[i][4];
}

否则,将整个数组翻转,以便它存储{row,column}而不是{column,row},像这样...
int[][] MyMat = {{0,9},{1,8},{2,7},{3,6},{4,5}};

// get the rows... (easy)
int[] My_0= MyMat[0]; //My_0 = {0,9}
int[] My_1= MyMat[1]; //My_1 = {1,8}
int[] My_2= MyMat[2]; //My_2 = {2,7}
int[] My_3= MyMat[3]; //My_3 = {3,6}
int[] My_4= MyMat[4]; //My_4 = {4,5}

// get the columns... (manually)
int[] My0= new int[]{MyMat[0][0],MyMat[1][0],MyMat[2][0],MyMat[3][0],MyMat[4][0]}; //My0 = {0,1,2,3,4}
int[] My1= new int[]{MyMat[0][1],MyMat[1][1],MyMat[2][1],MyMat[3][1],MyMat[4][1]}; //My1 = {9,8,7,6,5}

// get the columns... (as a for-loop)
int size = MyMat.length;
int[] My0 = new int[size]; //My0 = {0,1,2,3,4}
int[] My1 = new int[size]; //My1 = {9,8,7,6,5}
for (int i=0;i<size;i++){
    My0[i] = MyMat[0][i];
    My1[i] = MyMat[1][i];
}

请注意,无法使用速记方式轻松获取行和列 - 您必须决定哪个更重要,并将数组结构化为该格式。

1
如果我们知道二维数组的行和列的大小,我们可以按如下方式实现
令行数为rows
令列数为clmns
int[][] my = new int[clmns][rows];
for(int i=0;i<clmns;i++)
for(int j=0;j< rows; j++)
 my[i][j]=MyMat[j][i]; 

然后,逐列获取您原始数组的行数组。

否则,如果程序运行时给出了行数,则可以使用ArrayList数组的数组长度作为行数。


0

就像这样简单:

1. 转置你的二维矩阵 2. 然后按照以下方式操作:My0 = MyMat[0]; int[] My1 = MyMat[1];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接