小编典典

在Java中创建魔术广场

java

我必须编写一个程序,该程序需要用户输入一个奇数并创建一个幻方。幻方是指行,列和对角线的总和相同的正方形。这些是编写代码的特征:

  1. 向用户询问一个奇数
  2. 创建一个n x n数组。
  3. 请按照以下步骤创建一个魔术方块。
    一个。在第一行的中间放置一个1。
    b。从行中减去1,然后在列中加1。
    一世。如果可能,将下一个数字放在该位置。
    ii。如果不可能,请按照下列步骤操作。
    1. 如果在第-1行,则更改为最后一行
    2. 如果在最后一列中更改为第一列
    3. 如果被阻止,则下拉至下一行(从原始位置开始)
    4. 如果在右上角,则下拉至下一行。
  4. 打印数组

我已经编写了代码,但是当我运行它时,程序将输入除第二个数字以外的所有数字;由于某种原因,我的程序跳过了它。例如,如果我将数字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?*这是一个作业问题,因此代码只能回答。谢谢。


阅读 209

收藏
2020-11-26

共1个答案

小编典典

删除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
2020-11-26