对角填充二维数组

问题描述 投票:0回答:1

我一直在尝试让一个 10x10 2D 数组对角填充,如下图所示,几个小时了,但是在检查了使用行和列的所有可能方法之后,我似乎仍然无法识别我对代码的误解。

我应该得到什么:

这就是我已经走了多远,我不明白我做错了什么

 int n = 1;
 for (int i=0; i<=9; i++) {
    for (int j=9-i ; j>=7-i; j--) {
       if (j>=0)
          m[i][j] = n++;
    }
 }
java arrays for-loop nested-loops
1个回答
0
投票

您首先需要循环行,并且知道这是一个对角循环,每一步的起点将是 (i, i) 元组。从那里开始,内部循环最多循环 2 个元素,并更新给定位置的值(如果它们位于边界内)。每当我们为给定元素设置一个值时,我们都会递减

currentIndex
,因此我们不必担心它的值。

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

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        int currentIndex = 27;
        int[][] array = new int[10][10];
        for (int i = 0; i < array.length; i++) {
            for (int j = i; j <= i + 2 && (j < array[i].length); j++) {
                array[i][j] = currentIndex--;
            }
        }
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                System.out.print((array[i][j] > 9 ? "" : " ") + array[i][j] + " ");
            }
            System.out.println();
        }
    }
}

https://www.mycompiler.io/new/java

© www.soinside.com 2019 - 2024. All rights reserved.