我怎么能扭转我的魔方的输出

时间:2014-12-11 05:13:05

标签: java magic-square

我写了一个魔术方案,它运行良好。

但我需要将我的工作输出反转为: (看输出):

目前我的节目输出是:

enter image description here

我想要的输出是:

enter image description here

这是我目前的代码:

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 = num - 1;
    int col = num / 2;
    magic[row][col] = 1;

    for (int i = 2; i <= num * num; i++) {
        if (magic[(row + 1) % num][(col + 1) % num] == 0) {
            row = (row + 1) % num;
            col = (col + 1) % num;
        } else {
            row = (row - 1 + num) % num;
            // don't change 
        }
        magic[row][col] = i;
    }

    // print results
    for (int i = 0; i < num; i++) {
        for (int j = 0; j < num; j++) {
            System.out.print(magic[i][j] + "\t");
        }
        System.out.println();
    }


}

伙计们,请帮我调试我的代码,我需要的只是一些改变,不会完全伤害我的代码。 我认为我的循环中有些东西要改变,但我找不到它。

也许是数学公式..

2 个答案:

答案 0 :(得分:2)

您需要反向打印 - 从最后开始。更改循环遍历条件,如下所示

// print results
for (int i = num-1; i >=0; i--) {
    for (int j = num-1; j >=0; j--) {
        System.out.print(magic[i][j] + "\t");
    }
    System.out.println();
}

或保持循环变量完整使用

    for (int i = 0; i < num; i++) {
        for (int j = 0; j < num; j++) {
            System.out.print(magic[num-i-1][num-j-1] + "\t");
        }
        System.out.println();
    }

答案 1 :(得分:0)

首先将行设置为零

  int row = 0;// instead of num - 1;
  ...

然后进一步改变col的更新方式

for (int i = 2; i <= num * num; i++) {
    int newColumn = ((col - 1)+num) % num;
    int newRow = ((row - 1)+num) % num;
    if (magic[newRow][newColumn] == 0) {
        row = newRow;
        col = newColumn;
    } else {
        row = (row + 1) % num;
    }