我正在尝试编写一个填充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));
}
显然,这与我需要达到的目标相差甚远,我不确定它是否完全正确。我真的很感激一些帮助。
答案 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;
}
记下对角线上细胞的坐标,你应该快速看到条件是什么。