ch1*_*era 2 java arrays while-loop magic-square
我必须编写一个程序,从用户那里获取一个奇数,并创建一个魔术方块.幻方是每行,列和对角线的总和相同的方格.这些是编写代码的特征:
- 询问用户奇数
- 创建一个n×n数组.
- 按照以下步骤创建一个魔术方块.
一个.在第一行的中间放置一个1.
湾 从行中减去1并将1添加到列中.
一世.如果可能,将下一个号码放在该位置.
II.如果不可能,请按照下列步骤操作.
- 如果在行-1中,则更改为最后一行
- 如果在最后一列中更改为第一列
- 如果被阻止,则下拉到下一行(从原始位置)
- 如果在右上角,则下拉到下一行.
- 打印阵列
我已经编写了代码,但是当我运行它时,程序会输入所有数字,除了第二个; 由于某种原因,我的程序跳过了它.例如,如果我输入数字3作为奇数,我的输出是:
6 1 0
3 4 5
9 7 8
Run Code Online (Sandbox Code Playgroud)
0不应该在那里,但第二个是.这是我的代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
有人能告诉我哪里出错了,为什么我的程序会跳过2号?*这是一个家庭作业问题,所以代码只能回答.谢谢.
您的方块的逻辑确保永远不会写入右上角.
if in the upper right corner, then drop down to next row.
这是执行它的代码......
if (row == 0 && column == n - 1) {
column = n -1;
row += 1;
Run Code Online (Sandbox Code Playgroud)
因此,在下次迭代中输入任何值之前,您总是会离开该位置.您实际上并不需要将该行设置为n - 1的行,因为它已经是n - 1,因为它上面的逻辑已经定义了.
您实际上是将值2写入第二行第三列.然后它会被值5覆盖.如果在程序的每次迭代后输出数组的值,那么您将看到模型的状态如何变化.
| 归档时间: |
|
| 查看次数: |
21622 次 |
| 最近记录: |