2014-03-05 25 views
1

我想寫一個代碼,填充NxN矩陣中的2個主對角線,例如: 如果N = 5(通過命令行輸入),我們會有填充零5x5矩陣和對角線必須填寫,如2S:填充二維數組中的主對角線

2 0 0 0 2 
0 2 0 2 0 
0 0 2 0 0 
0 2 0 2 0 
2 0 0 0 2 

我寫了代碼全零表,但我不明白我們如何在對角線填寫。 縱觀5×5的情況下,我將不得不在以下指數在矩陣中填寫:

#1 (0,0) (0,n-1) 
#2 (1,1) (1,n-2) 
#3 (2,2) (2,n-3) 
#4 (3,1) (3, n-2) 
#5 (4,0) (4,n-1) 

然而,由於N可以是任何數字,我認爲首先我必須要找到中間行,之後,我必須以相反的順序減少指數。

我只學了2周的Java,而且這個很難。 我對零填充表的代碼是這樣的:

public static void main (String[] args){ 
     int n = Integer.parseInt(args[0]); 
     System.out.println(n); 
     int[][] table = new int[n][]; 
     for (int i = 0; i < n; i++) { 
     table[i] = new int[i + 1]; 
     for (int j = 0; j <= i; j++) { 
     table[i][j] = (0); 


      } 
     } System.out.print(Arrays.deepToString(table)); 
    } 

顯然,這是從我所需要達到很遠,我不知道這是否是完全正確的。我真的很感謝一些幫助。

回答

3

試試這個,

/* package whatever; // don't place package name! */ 

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    public static void main (String[] args){ 
     int n = 5; 
     System.out.println(n); 
     int[][] table = new int[n][]; 
     for (int i = 0; i < n; i++) { 
     table[i] = new int[n]; 
     for (int j = 0; j < n; j++) { 
      if(i==j || n-i == j+1){ 
       table[i][j] = table[i][n-i-1] = 2; 
      } 
      else{ 
      table[i][j] = 0; 
      } 
      System.out.print(table[i][j]); 
      } 
      System.out.println(); 
     } 
    } 
} 
+0

請不要給作業問題的完整解決方案。它幫助沒有人。 – slim

+0

是的,我明白了:) –

3

爲了填補一個對角線,我們只是每次都指望從i==0i==size-1(i,i)填寫。

for(int i=0; i<size; i++) { 
    table[i][i] = 2; 
} 

的另一條對角線只是稍微難一點:

for(int i=0; i<size; i++) { 
    table[i][some calculation involving i and size] = 2; 
} 

你應該能夠制定出計算是什麼。

您可以在兩個循環中完成 - 但您也可以將兩個對角線填充到一個循環中。

您也可以修改您創建數組的嵌套循環,以便在您遇到它們時處理對角線上的單元格。

#inside the loop 
    if(a condition indicating that the cell is on a diagonal) { 
     table[i][j] = 2; 
    } else { 
     table[i][j] = 0; 
    } 

記下對角線上單元格的座標,你應該很快看到條件是什麼。

+1

由於問題中的陳述「我假設首先我必須找到中間行」,我想提示一下,如果您使用此方法,您將填充中心一個奇數大小的矩陣兩次,*但沒關係*。 –