创建一个*n正方形并使所有边的总和相同

我需要一些帮助才能使我的代码正常工作;我是 Java 新手,所以请原谅我的任何不好的做法。我没有收到任何错误:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 5 at MagicSquare.main(MagicSquare.java:22)

我不确定如何使行和列环绕。

import java.util.Scanner;
    
    
    public class MagicSquare {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
    
            System.out.print("Enter an odd number: ");
            int n = in.nextInt();
            int[][] magicSquare = new int[n][n];
    
            for (int i = 0; i < n; i++) {
                for(int j = 0; j < n; j++) {
                    magicSquare[i][j] = 0;
                }
            }
    
            int x = 1;
            int y = (n + 1) / 2;
    
            for (int i = 0; i < (n * n); i++) {
                if (magicSquare[x - 1][y - 1] == 0) {
                    x -= 1;
                    y -= 1;
                }
                else {
                    x += 1;
                    y = y;
                }
                magicSquare[x][y] = i;
            }
            for(int i=0; i < n; i++){
                for(int j=0; j < n; j++){
                    System.out.print(magicSquare[i][j] + " ");
                }
                System.out.print("n");
            }
        }
    }

回答

你有三个问题。

  1. Java 中的数组索引从 0 开始,而不是从 1 开始。因此,将 x 初始化为 0,将 y 初始化为 (n+1)/2-1。

  2. 您需要包装索引。例如,如果您移动到第 -1 列,您实际上必须移动到第 n-1 列。或者,如果您将 1 添加到 x 并尝试移动到第 n 行,您实际上必须转到第 0 行(因为请记住 - 最后一行是第 n-1 行)。

  3. 您实际上应该使用 System.out.print 打印构造的数组。


以上是创建一个*n正方形并使所有边的总和相同的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>