填充2D阵列中的主对角线

时间:2014-03-05 16:54:30

标签: java arrays multidimensional-array

我正在尝试编写一个填充NxN矩阵中2个主要对角线的代码,例如: 如果N = 5(通过命令行输入),我们将有一个5x5矩阵填充零,对角线将填充2,如:

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

我写了一个全零表的代码,但我无法弄清楚如何填充对角线。 看看5x5的情况,我必须在以下指数中填写矩阵:

#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可以是任何数字,我假设首先我必须找到中间行,之后我必须以相反的顺序递减索引。

我正在学习Java 2周,这个很难。 零填充表的代码是:

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));
    }

显然,这与我需要达到的目标相差甚远,我不确定它是否完全正确。我真的很感激一些帮助。

2 个答案:

答案 0 :(得分: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();
        } 
    }
}

答案 1 :(得分:3)

要填充一个对角线,我们只需从i==0计算到i==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;
  }

记下对角线上细胞的坐标,你应该快速看到条件是什么。