您好我在java中创建了一个Magic Square程序 如果您输入数字3但是如果我输入5,则它可以正常工作 发生了一个问题.. 模式出错了。
请帮我查一下我的代码中的错误:
这是我的代码:
Scanner input = new Scanner(System.in);
System.out.print("Enter a number: ");
int num = input.nextInt();
// Number must be ODD and not less than or equals to one to continue
while ((num % 2 == 0) || (num <= 1)) {
System.out.println("Enter a valid number: ");
num = input.nextInt();
}
int[][] magic = new int[num][num];
int row = 0;
int col = num / 2;
magic[row][col] = 1;
for (int i = 2; i <= num * num; i++) {
if (magic[(row + 5) % num][(col + 2) % num] == 0) {
row = (row + 5) % num;
col = (col + 2) % num;
} else {
row = (row + 1 + num) % num;
}
magic[row][col] = i;
}
for (int x = 0; x < num; x++) {
for (int j = 0; j < num; j++) {
System.out.print(magic[x][j] + "\t");
}
System.out.println();
}
}
输入3时,它是正确的, 这是输出:
但是当我键入一个像5的数字时: 它变成了:
已更新!
答案 0 :(得分:1)
您似乎正在尝试实施Method for constructing a magic square of odd order。
该方法规定从第一行的中心列开始,编号为1.
你似乎有这个权利。
在此之后,填充方块的基本运动是对角向上和向右,一步一步。
我将其编码为:
int newRow = row - 1;
int newCol = col + 1;
当&#34;向上和向右&#34;移动将离开正方形,它分别缠绕到最后一行或第一列。
这显然是:
if ( newRow < 0 ) {
newRow = num - 1;
}
if ( newCol > num - 1 ) {
newCol = 0;
}
如果遇到填充的方块,则垂直向下移动一个方格,然后继续像以前一样。
if (magic[newRow][newCol] != 0) {
newRow = row + 1;
newCol = col;
}
我知道这并没有真正解决你的问题,但我希望它能帮助你实现目标。看看我如何采用算法的话,并尽可能准确地与代码匹配。