创建一个*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");
}
}
}
回答
你有三个问题。
-
Java 中的数组索引从 0 开始,而不是从 1 开始。因此,将 x 初始化为 0,将 y 初始化为 (n+1)/2-1。
-
您需要包装索引。例如,如果您移动到第 -1 列,您实际上必须移动到第 n-1 列。或者,如果您将 1 添加到 x 并尝试移动到第 n 行,您实际上必须转到第 0 行(因为请记住 - 最后一行是第 n-1 行)。
-
您实际上应该使用 System.out.print 打印构造的数组。