2012-06-18 163 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];

相關問題