2012-06-18 37 views
6

Supongamos que tengo una matriz 2D (matriz) en Java así ...obtener las filas y columnas de una matriz matriz 2D en Java

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

Si quiero extraer las columnas, que puedo hacer fácilmente como esto ...

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

Pero, ¿cómo puedo extraer las filas? ...

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} 

¿hay alguna forma abreviada de lograr esto?

+1

No puede hacer eso en una sola línea. Debería construir una nueva matriz y llenarla con los valores de la matriz [columna] [fila] manualmente, tal vez dentro de un bucle for. –

+0

De acuerdo, no es posible a menos que defina la matriz de esa manera inicialmente o la codifique manualmente. – wattostudios

Respuesta

3

Si desea obtener las filas, necesita obtener los valores de cada matriz y luego crear una nueva matriz a partir de los valores. Puede asignar los valores manualmente, o utilizar un bucle for, como este ...

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]; 
} 

De lo contrario, convertir toda la matriz alrededor de modo que se almacena en lugar de {row,column}{column,row}, así ...

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]; 
} 

Tenga en cuenta que no es posible tener una abreviatura que le permita obtener las filas y las columnas fácilmente; tendrá que decidir cuál quiere más y estructurar las matrices en ese formato. .

1

Si conocemos el tamaño de la fila y la columna de tamaño de 2-d gama que puede alcanzar por encima de la siguiente manera

Let Filas No.of - filas

Deje Columnas No.of -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]; 

Luego, al tomar una columna al momento, obtendrá la matriz de filas de su matriz original.

De lo contrario, puede usar Array of ArrayList con Array length of your rows si el n. ° de filas se entregó en el tiempo de ejecución del programa.

1

Es simple como esto:

1. Transponga su matriz 2D 2. Luego haz lo que digas [] My0 = MyMat [0]; int [] My1 = MyMat [1];

Cuestiones relacionadas