我必须编写一个程序,该程序需要用户输入一个奇数并创建一个幻方。幻方是指行,列和对角线的总和相同的正方形。这些是编写代码的特征:
向用户询问一个奇数 创建一个n x n数组。 请按照以下步骤创建一个魔术方块。 一个。在第一行的中间放置一个1。 b。从行中减去1,然后在列中加1。 一世。如果可能,将下一个数字放在该位置。 ii。如果不可能,请按照下列步骤操作。 如果在第-1行,则更改为最后一行 如果在最后一列中更改为第一列 如果被阻止,则下拉至下一行(从原始位置开始) 如果在右上角,则下拉至下一行。 打印数组
我已经编写了代码,但是当我运行它时,程序将输入除第二个数字以外的所有数字;由于某种原因,我的程序跳过了它。例如,如果我将数字3作为奇数输入,则输出为:
6 1 0 3 4 5 9 7 8
不应该有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(); } }
有人可以告诉我我哪里出了错,为什么我的程序跳过了数字2?*这是一个作业问题,因此代码只能回答。谢谢。
删除3.4可能会修复您的代码。
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; int curr_row; int curr_col; while (number <= n * n) { magicSquare[row][column] = number; number++; curr_row = row; curr_col = column; row -= 1; column += 1; if (row == -1) { row = n - 1; } if (column == n) { column = 0; } if (magicSquare[row][column] != 0) { row = curr_row + 1; column = curr_col; if (row == -1) { row = n - 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(); } }
设置n = 3可获得以下输出,该输出似乎正确。
8 1 6 3 5 7 4 9 2