2016-01-13 114 views
-4

我目前有一個程序,當用戶詢問一個整數時,根據輸入生成一個2d矩陣(即2:2格子中的2個結果的輸入) 。Java中的二維矩陣加倍

然後程序用隨機數0-9填充這個矩陣,然後創建一個新的矩陣,其大小是原始矩陣的兩倍(2x2變成4x4,3x3到6x6等)。

但是,我無法得到正確複製的結果。我試圖讓矩陣以這樣的方式,從一個矩陣像這樣重複: 1 2 3 4 5 6 7 8 9

這將產生一個矩陣: 1 1 2 2 3 3 1 1 2 2 3 3 4 4 5 5 6 6 4 4 5 5 6 6 7 7 8 8 9 9 7 7 8 8 9 9

目前,我只是用兩個用於循環來生成這個矩陣,但它不打印出正確的結果。

public static void main(String[] args) { 
    System.out.println("Enter the size of the matrix."); 
    Scanner keyboard = new Scanner(System.in); 
    Random random = new Random(); 
    int n = keyboard.nextInt(); 
    int[][] matrix = new int[n][n]; 
    for (int x=0;x<n;x++) 
    { 
     for (int y=0;y<n;y++) 
     { 
      matrix[x][y] = random.nextInt(10); 
     } 
    } 
    System.out.println("The matrix is"); 
    for (int x=0;x<matrix.length;x++) 
    { 
     for (int y=0;y<matrix.length;y++) 
     { 
      System.out.print(matrix[x][y]+" "); 
     } 
     System.out.println(""); 
    } 
    int nDouble = n * 2; 
    int c = 1; 
    int[][] matrixDoubled = new int[nDouble][nDouble]; 
    for (int y=0;y<matrix.length;y++) 
    { 
     for (int x=0;x<matrix.length;x++) 
     { 
      matrixDoubled[x][y] = matrix[x][y]; 
      matrixDoubled[x+c][y] = matrix[x][y]; 
      matrixDoubled[x][y+c] = matrix[x][y]; 
      matrixDoubled[x+c][y+c] = matrix[x][y]; 
      c = c + 1; 
     } 
     c = 1; 
    } 
    System.out.println("The doubled matrix is"); 
    for (int x=0;x<matrixDoubled.length;x++) 
    { 
     for (int y=0;y<matrixDoubled.length;y++) 
     { 
      System.out.print(matrixDoubled[x][y]+" "); 
     } 
     System.out.println(""); 
    } 
} 

} 
+2

德魯,這看起來像一個家庭主婦k任務,這不完全是StackOverflow中的人員想回答的問題。人們可能會理解你很懶惰,並要求他們爲你工作以獲取計算器點數。而且,如果這是真的,那麼對於老師和你自己來說你是不道德的。 – Leo

+1

同一問題:http://stackoverflow.com/questions/34756346/doubling-a-matrix – scsere

回答

2

加倍矩陣的索引是錯誤的。他們應該是:

 matrixDoubled[2*x][2*y] = matrix[x][y]; 
     matrixDoubled[2*x+1][2*y] = matrix[x][y]; 
     matrixDoubled[2*x][2*y+1] = matrix[x][y]; 
     matrixDoubled[2*x+1][2*y+1] = matrix[x][y]; 

這樣matrix[0][0]被映射到位置[0][0][1][0],在新的矩陣[0][1] & [1][1]matrix[0][1]被映射到位置[0][2][1][2][0][3] & [1][3],等等...

0

如果這就是this應該這樣做的問題:

for (int i = 0; i < matrixDoubled.length; i++) 
    for (int j = 0; j < matrixDoubled.length; j++) 
     matrixDoubled[i][j] = matrix[i/size][j/size]; 

注意:這段代碼當然不是最好的解決方案,而是一個簡單快速的解決方案。它只適用於兩個尺寸相同的尺寸,如果matrixDoubled不是matrix的兩倍,它將不起作用。如果它總是隻是「加倍」一個矩陣,它應該工作得很好。


輸出:
如果選擇大小爲2比它會輸出:

Enter the size of the matrix 
2 
The Matrix is 
3 5 
5 2 
The matrixDoubled is 
3 3 5 5 
3 3 5 5 
5 5 2 2 
5 5 2 2 

和大小3這將是例如

Enter the size of the matrix 
3 
The Matrix is 
4 4 3 
5 9 4 
7 4 1 
The matrixDoubled is 
4 4 4 4 3 3 
4 4 4 4 3 3 
5 5 9 9 4 4 
5 5 9 9 4 4 
7 7 4 4 1 1 
7 7 4 4 1 1 

我希望這有助於(: