Java二维数组的对角线模式填充指的是按照矩阵对角线的走向,将指定的元素值填充到二维数组的对应位置,常见的填充模式包括主对角线填充、副对角线填充以及斜向遍历填充等,不同的填充规则需要对应不同的遍历逻辑。
基础准备:定义二维数组
首先需要定义一个二维数组,通常二维数组的行数和列数可以相同也可以不同,这里以n行n列的方阵为例,先初始化数组并默认填充0,后续再按照对角线规则替换对应位置的值。
public class DiagonalFillDemo {
public static void main(String[] args) {
int n = 5; // 定义方阵的边长
int[][] matrix = new int[n][n]; // 初始化5行5列的二维数组,默认值为0
// 后续填充逻辑将在这里编写
}
}
主对角线填充实现
主对角线指的是二维数组中行索引和列索引相等的元素组成的线,即matrix[i][i]的位置,填充时只需要遍历索引从0到n-1,将对应位置赋值为目标值即可。
public class DiagonalFillDemo {
public static void main(String[] args) {
int n = 5;
int[][] matrix = new int[n][n];
int fillValue = 1; // 填充的目标值
// 主对角线填充逻辑
for (int i = 0; i < n; i++) {
matrix[i][i] = fillValue;
}
// 打印数组查看结果
printMatrix(matrix);
}
// 打印二维数组的辅助方法
private static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + "t");
}
System.out.println();
}
}
}
运行上述代码后,输出的二维数组中只有主对角线位置的元素为1,其余位置为默认的0。
副对角线填充实现
副对角线指的是二维数组中行索引和列索引之和等于n-1的元素组成的线,即matrix[i][n-1-i]的位置,填充时遍历索引从0到n-1,将对应位置赋值为目标值即可。
public class DiagonalFillDemo {
public static void main(String[] args) {
int n = 5;
int[][] matrix = new int[n][n];
int fillValue = 2; // 副对角线填充的目标值
// 副对角线填充逻辑
for (int i = 0; i < n; i++) {
matrix[i][n - 1 - i] = fillValue;
}
printMatrix(matrix);
}
private static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + "t");
}
System.out.println();
}
}
}
斜向遍历填充模式
斜向遍历填充是指按照从左上到右下的斜线方向依次填充元素,每条斜线上的元素满足行索引减列索引为固定值。可以通过遍历差值的方式实现,差值的范围从-(n-1)到n-1。
public class DiagonalFillDemo {
public static void main(String[] args) {
int n = 5;
int[][] matrix = new int[n][n];
int currentValue = 1; // 初始填充值
// 斜向遍历填充,差值为d,d = i - j
for (int d = -(n - 1); d <= n - 1; d++) {
for (int i = 0; i < n; i++) {
int j = i - d;
// 判断列索引j是否在合法范围内
if (j >= 0 && j < n) {
matrix[i][j] = currentValue;
currentValue++;
}
}
}
printMatrix(matrix);
}
private static void printMatrix(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + "t");
}
System.out.println();
}
}
}
注意事项
- 操作二维数组时一定要注意索引的边界,避免数组越界异常,所有的行索引和列索引都需要在0到n-1的范围内。
- 如果二维数组是行列数不同的矩形,需要调整遍历的边界条件,比如行数为m,列数为n时,副对角线的列索引计算方式不变,但遍历的行数边界要取较小值。
- 填充时如果需要对不同对角线赋予不同的值,可以在遍历过程中根据差值或者索引关系调整填充值。