-1

嗨,我在 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这样的数字时:它变成:

在此处输入图像描述

更新!

4

1 回答 1

1

您似乎正在尝试实现构造奇数魔方的方法

该方法规定从第一行的中心列开始,编号为 1。

你似乎有这个权利。

之后,填充方块的基本动作是斜向上和向右,一次一步。

我会将其编码为:

int newRow = row - 1;
int newCol = col + 1;

当“向上和向右”移动将离开正方形时,它会分别绕到最后一行或第一列。

这很明显:

if ( newRow < 0 ) {
  newRow = num - 1;
}
if ( newCol > num - 1 ) {
  newCol = 0;
}

如果遇到实心方块,则垂直向下移动一个方块,然后像以前一样继续。

if (magic[newRow][newCol] != 0) {
  newRow = row + 1;
  newCol = col;
}

我知道这实际上并不能解决你的问题,但我希望它能让你朝着你的目标前进。看看我是如何使用算法的单词并尽可能准确地将它们与代码匹配的。

于 2014-12-10T16:54:20.663 回答