我写了一个魔术方案,它运行良好。
但我需要将我的工作输出反转为: (看输出):
目前我的节目输出是:
我想要的输出是:
这是我目前的代码:
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();
}
}
伙计们,请帮我调试我的代码,我需要的只是一些改变,不会完全伤害我的代码。 我认为我的循环中有些东西要改变,但我找不到它。
也许是数学公式..
答案 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;
}