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