2010-03-08 92 views
0

我有一個二維數組,讓我們這樣說:如何降低二維數組

2 0 8 9 
3 0 -1 20 
13 12 17 18 
1 2 3 4 
2 0 7 9 

如何創建一個數組通過假設第二排和第三列減少?

2 0 9 
13 12 18 
1 2 4 
2 0 9 
+0

不幸的是,這沒有內置的。你應該尋找一個矩陣操縱庫。 – Thilo 2010-03-08 02:07:08

+0

你正在尋找一個庫,或者你可以編寫的函數來執行這個動作。 – dagoof 2010-03-08 02:10:43

+0

函數將允許我不打印但創建此數組。 – owca 2010-03-08 02:28:08

回答

4

刪除數組中的行和列是昂貴的操作,因爲你需要轉移的事情,但這些方法做你想要什麼:

static int[][] removeRow(int[][] data, int r) { 
    int[][] ret = new int[data.length - 1][]; 
    System.arraycopy(data, 0, ret, 0, r); 
    System.arraycopy(data, r+1, ret, r, data.length - r - 1); 
    return ret; 
} 

static int[][] removeColumn(int[][] data, int c) { 
    for (int r = 0; r < data.length; r++) { 
     int[] row = new int[data[r].length - 1]; 
     System.arraycopy(data[r], 0, row, 0, c); 
     System.arraycopy(data[r], c+1, row, c, data[r].length - c - 1); 
     data[r] = row; 
    } 
    return data; 
} 

您可能希望研究允許更便宜的清除的其他數據結構,即雙鏈表。參見例如Dancing Links

+1

+1用於建議不同的數據結構。 – Cam 2010-03-08 02:36:40

1
public class TestMe { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    int array[][] = {{2,0, 8, 9,}, 
         {3, 0, -1, 20}, 
         {13, 12, 17, 18}, 
         {1, 2, 3, 4,}, 
         {2, 0, 7, 9}}; 

    for(int i=0; i<array.length;i++){ 
     if(i == 1){ 
      continue; 
     } 
     for(int j=0; j<array[i].length;j++){ 
      if(j==2){ 
       continue; 
      } 
      System.out.print(array[i][j]+" "); 
     } 
     System.out.println(""); 
    } 


} 

}

+0

你可能想嘗試!= ... – alphazero 2010-03-08 02:19:27

+0

這樣我可以只打印它,但它不會給我減少數組:/ – owca 2010-03-08 02:27:33