2014-12-11 74 views
1

我写了一个神奇的方形程序,它运行良好。我怎么能扭转我的魔方的输出

但我需要我的工作输出逆变成这样: (查看输出):

目前我的程序的输出是:

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(); 
    } 


} 

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

也许数学公式..

+0

任何人都记得如何做矩阵旋转?似乎旋转矩阵180度解决了它(数学)。我忘了矩阵旋转。 – j4rey89 2014-12-11 05:54:46

回答

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(); 
    } 
+0

这是一个好主意,但除此之外。 我怎么能通过更改阵列的主循环内的代码来更改输出.. 谢谢 – repsajznav 2014-12-11 05:27:10

0

第一组行至零

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

再往改变山坳方式更新

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; 
    } 
+0

我这样做了,但输出变得完全错误。 你可以再检查一次吗?反正 谢谢你回答我的问题 – repsajznav 2014-12-11 05:47:25

+0

没注意到底两行是错的方式。只测试它与大小3. – BevynQ 2014-12-11 05:57:20

+0

非常感谢。它有助于我的代码很多。你的想法非常棒! – repsajznav 2014-12-11 06:45:14