2012-06-18 91 views
6

假设我有在Java中这样的二维数组(矩阵)...获取从二维数组矩阵的行和列在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

你不能在一行中做到这一点。你应该建立一个新的数组,并手动填充matrix [column] [row]值,也许在for循环中。 –

+0

同意,除非您最初以这种方式定义矩阵或手动编码,否则不可能。 – wattostudios

回答

3

如果您想获取行,您需要从每个数组中获取值,然后从这些值中创建一个新数组。你可以手动指定值,或使用一个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

如果我们知道2- d阵列的尺寸的行和列大小就可以达到上述如下

让节数行 - 行

让节数列-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]; 

然后在时间上取一列给你原始数组的行数组。

否则,如果在程序运行时给出no.of行,则可以使用数组ArrayList和行数组长度。

1

其简单如下:

1。转置你的2D矩阵 2。然后像你一样做[] My0 = MyMat [0]; int [] My1 = MyMat [1];

相关问题