You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

10×10二维数组对角线填充问题求助

问题排查与修正方案

首先看你的代码核心问题:

  • 内层循环的j范围设置完全偏离对角线填充的逻辑,j>=7-i的终止条件导致每次仅处理3个元素,无法覆盖10×10数组的目标区域。
  • 仅通过j>=0过滤无效列,但未结合行的有效范围判断,导致后续行(i≥8)仅能填充1-2个元素,大部分数组位置未被赋值。
  • 整体循环未围绕对角线的核心特征(如i+j为定值或i-j为定值)设计,无法实现完整的对角线填充效果。

假设目标为「按对角线顺序填充整个数组」(即按i+j的和分组,依次填充每条对角线)

修正后的代码如下:

int n = 1;
int[][] m = new int[10][10];
// 遍历所有可能的i+j和值(0到18,对应10×10数组的所有对角线)
for (int sum = 0; sum <= 18; sum++) {
    // 确定当前对角线的行起始与结束范围
    int startRow = Math.max(0, sum - 9);
    int endRow = Math.min(9, sum);
    // 遍历行,计算对应列并赋值
    for (int i = startRow; i <= endRow; i++) {
        int j = sum - i;
        m[i][j] = n++;
    }
}

该代码会按i+j=0→i+j=1→…→i+j=18的顺序,依次填充每条对角线上的元素,最终得到完整的对角线填充效果。

假设目标为「填充三条平行对角线」(主对角线及其上下各一条)

如果你的需求是仅填充主对角线(i=j)、上方对角线(i=j-1)、下方对角线(i=j+1),修正后的代码如下:

int n = 1;
int[][] m = new int[10][10];
// 填充上方对角线(i = j-1)
for (int i = 0; i < 9; i++) {
    m[i][i+1] = n++;
}
// 填充主对角线(i = j)
for (int i = 0; i < 10; i++) {
    m[i][i] = n++;
}
// 填充下方对角线(i = j+1)
for (int i = 1; i < 10; i++) {
    m[i][i-1] = n++;
}

内容的提问来源于stack exchange,提问作者blackburrow112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:07:45