2013-08-26 117 views
-4

我使用Java編碼。更改數組(矩陣)索引(Java)

數組的索引是這樣的:

[0,0] [0,1] [0,2] [0,3] [0,4] 
[1,0] [1,1] [1,2] [1,3] [1,4] 
[2,0] [2,1] [2,2] [2,3] [2,4] 
[3,0] [3,1] [3,2] [3,3] [3,4] 
[4,0] [4,1] [4,2] [4,3] [4,4] 
[5,0] [5,1] [5,2] [5,3] [5,4] 

是否有可能有它這樣

[5,0] [5,1] [5,2] [5,3] [5,4] 
[4,0] [4,1] [4,2] [4,3] [4,4] 
[3,0] [3,1] [3,2] [3,3] [3,4] 
[2,0] [2,1] [2,2] [2,3] [2,4] 
[1,0] [1,1] [1,2] [1,3] [1,4] 
[0,0] [0,1] [0,2] [0,3] [0,4] 
+5

這只是一個不同的表示。向後迭代它。 –

+0

是否可以像這樣(?) - >是的,是的。 – JNL

+0

這取決於你的意思是「擁有」_它。例如,您可以簡單地轉換索引。 – keyser

回答

3

這也許會清楚(?)。假設你有這樣的數組:

int[][] arr = new int[6][5]; 

你會 「一般」 重複這樣的:

for(int i = 0; i < arr.length; i++) { 
    for(int j = 0; j < arr[i].length; j++) { 
     System.out.print("[" + i + "," + j +"]"); 
    } 
    System.out.println(); 
} 

此輸出:

[0,0][0,1][0,2][0,3][0,4] 
[1,0][1,1][1,2][1,3][1,4] 
[2,0][2,1][2,2][2,3][2,4] 
[3,0][3,1][3,2][3,3][3,4] 
[4,0][4,1][4,2][4,3][4,4] 
[5,0][5,1][5,2][5,3][5,4] 

現在,我們可以採取同樣的陣列,但迭代不同地產生您的輸出,通過向後迭代i

for(int i = arr.length - 1; i >=0; i--) { 
    for(int j = 0; j < arr[i].length; j++) { 
     System.out.print("[" + i + "," + j +"]"); 
    } 
    System.out.println(); 
} 

此輸出:

[5,0][5,1][5,2][5,3][5,4] 
[4,0][4,1][4,2][4,3][4,4] 
[3,0][3,1][3,2][3,3][3,4] 
[2,0][2,1][2,2][2,3][2,4] 
[1,0][1,1][1,2][1,3][1,4] 
[0,0][0,1][0,2][0,3][0,4] 

您可以在ideone嘗試一下,看看它的工作。

0

只需操縱索引,就可以按不同的順序打印/訪問數組元素。

雖然與java8 lambda expressions下面的代碼會看起來更整潔。

public class Matrix { 
    static interface Block { 
     void run(int array[][], int i, int j, int rows, int cols); 
    } 

    public static void main(String[] args) { 
     int array[][] = new int[6][5]; 
     print(array, new Block() { 
      @Override 
      public void run(int array[][], int i, int j, int rows, int cols) { 
       System.out.printf("[%d,%d] ", i, j); 
      } 
     }); 
     print(array, new Block() { 
      @Override 
      public void run(int array[][], int i, int j, int rows, int cols) { 
       System.out.printf("[%d,%d] ", j, i); 
      } 
     }); 
     print(array, new Block() { 
      @Override 
      public void run(int array[][], int i, int j, int rows, int cols) { 
       System.out.printf("[%d,%d] ", rows - 1 - i, j); 
      } 
     }); 
     print(array, new Block() { 
      @Override 
      public void run(int array[][], int i, int j, int rows, int cols) { 
       System.out.printf("[%d,%d] ", i, cols - 1 - j); 
      } 
     }); 
    } 

    private static void print(int[][] array, Block block) { 
     for (int i = 0; i < array.length; i++) { 
      for (int j = 0; j < array[i].length; j++) { 
       block.run(array, i, j, array.length, array[i].length); 
      } 
      System.out.println(); 
     } 
     System.out.println("------------------------"); 
    } 
} 

輸出

[0,0] [0,1] [0,2] [0,3] [0,4] 
[1,0] [1,1] [1,2] [1,3] [1,4] 
[2,0] [2,1] [2,2] [2,3] [2,4] 
[3,0] [3,1] [3,2] [3,3] [3,4] 
[4,0] [4,1] [4,2] [4,3] [4,4] 
[5,0] [5,1] [5,2] [5,3] [5,4] 
------------------------ 
[0,0] [1,0] [2,0] [3,0] [4,0] 
[0,1] [1,1] [2,1] [3,1] [4,1] 
[0,2] [1,2] [2,2] [3,2] [4,2] 
[0,3] [1,3] [2,3] [3,3] [4,3] 
[0,4] [1,4] [2,4] [3,4] [4,4] 
[0,5] [1,5] [2,5] [3,5] [4,5] 
------------------------ 
[5,0] [5,1] [5,2] [5,3] [5,4] 
[4,0] [4,1] [4,2] [4,3] [4,4] 
[3,0] [3,1] [3,2] [3,3] [3,4] 
[2,0] [2,1] [2,2] [2,3] [2,4] 
[1,0] [1,1] [1,2] [1,3] [1,4] 
[0,0] [0,1] [0,2] [0,3] [0,4] 
------------------------ 
[0,4] [0,3] [0,2] [0,1] [0,0] 
[1,4] [1,3] [1,2] [1,1] [1,0] 
[2,4] [2,3] [2,2] [2,1] [2,0] 
[3,4] [3,3] [3,2] [3,1] [3,0] 
[4,4] [4,3] [4,2] [4,1] [4,0] 
[5,4] [5,3] [5,2] [5,1] [5,0] 
------------------------