-2

我正在创建一个名为 magicsquare 的 java 项目,我已经在网上搜索了如何做到这一点。现在,我试图了解第二个循环是如何工作的,我知道它打印并对齐幻方,但我不知道细节。我已经知道第一个了。如果有人向我解释第二个循环,我将不胜感激。谢谢!

import java.util.*;
public class Magicsquare {

        public static void main(String[] args) { 
            Scanner input = new Scanner(System.in);

     try{
            int N;
            System.out.print("Enter a number to create a Magic Square: ");
            N=input.nextInt();

            if (N % 2 == 0){
                System.out.print("N must be an Odd number!");
            }

            else{

            int[][] magic = new int[N][N];
            int row = N-1;
            int col = N/2;
            magic[row][col] = 1;

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

                }
                magic[row][col] = i;
            }


            for (int c = 0; c < N; c++) {
                 for (int r = 0; r < N; r++) {
                    if (magic[r][c] < 10)  System.out.print(" ");  // for alignment
                    if (magic[r][c] < 100) System.out.print(" ");  // for alignment
                    System.out.print(magic[r][c] + " ");
                }
                System.out.println();
          } 
       }main (null);
    }catch (Exception e){
        System.out.print("Invalid Input!");
    }
  }
}
4

1 回答 1

0

嗯,首先是显而易见的。关于< 10and的部分< 100:如果一个数字在 0 到 9 之间,它只会打印出一个数字。如果它在 10 到 99 之间,它将打印出两个。如果它在 100 到 999 之间,它将使用三位数字打印出来。(似乎编写此代码是为了假设它只会遇到 0 到 999 之间的数字。一般来说,最好以某种方式确保这一点,而不仅仅是希望。)

因此,使用if语句及其额外的空格,“5”将打印为“5”(注意两个前导空格,总共三个字符)。25 将打印为“25”(同样是三个字符),125 将打印为“125”(又是三个数字)。由于所有数字都使用三个字符打印出来,因此所有内容都会整齐地排列在列中。

让我感到困惑的是,您首先要迭代c,然后r. 这似乎是说您要在屏幕上的单行打印第一列,然后将第二列打印为第二行,将第三列打印为第三行。即整个事情已经在对角线上旋转。但也许这只是一个命名问题。

于 2015-09-17T21:21:59.867 回答