【发布时间】:2016-07-02 14:31:37
【问题描述】:
我必须编写一个程序,从用户那里接收一个奇数并创建一个魔方。幻方是其中每一行、每一列和对角线之和相同的方。这些是编写代码的特点:
- 向用户询问奇数
- 创建一个 n × n 数组。
- 按照以下步骤创建魔方。
一种。在第一行的中间放置一个 1。
湾。从行中减去 1 并添加 1 到专栏。
一世。如果可能,将下一个数字放在该位置。
ii.如果不可能,请按照以下步骤操作。
- 如果在-1行,则更改到最后一行
- 如果在最后一列更改为第一列
- 如果被阻止,则下拉到下一行(从原始位置)
- 如果在右上角,则下拉到下一行。
- 打印数组
我已经编写了代码,但是当我运行它时,程序会输入除数字 2 之外的所有数字;出于某种原因,我的程序跳过了它。例如,如果我把数字 3 作为奇数,我的输出是:
6 1 0
3 4 5
9 7 8
0 不应该在那里,但数字 2 是。这是我的代码:
public static void main(String[] args) {
System.out.print("Give an odd number: ");
int n = console.nextInt();
int[][] magicSquare = new int[n][n];
int number = 1;
int row = 0;
int column = n / 2;
while (number <= n * n) {
magicSquare[row][column] = number;
number++;
row -= 1;
column += 1;
if (row == -1) {
row = n - 1;
}
if (column == n) {
column = 0;
}
if (row == 0 && column == n - 1) {
column = n - 1;
row += 1;
} else if (magicSquare[row][column] != 0) {
row += 1;
}
}
for (int i = 0; i < magicSquare.length; i++) {
for (int j = 0; j < magicSquare.length; j++) {
System.out.print(magicSquare[i][j] + " ");
}
System.out.println();
}
}
谁能告诉我哪里出错了,为什么我的程序跳过了数字 2? *这是一个家庭作业问题,所以请只回答代码。谢谢。
【问题讨论】:
-
您的变量控制台未定义。
-
@Chris311 这可能是他班级的一个领域,因为他的代码似乎正在编译。
-
@Chris311 它在程序中,我只是没有在这里包含它。
-
由于
number从 1 开始,并且从不递减,因此数组中可能包含 0 的唯一原因是,从不填充相应的索引。 -
这正是这里发生的事情,因为需求的逻辑,或者至少是代表它的代码,阻止了它。 2 被写入第 2 行第 3 列,但后来被 5 覆盖。
标签: java arrays while-loop magic-square