有人可以向我解释第二个循环..我已经理解了第一个...谢谢

时间:2015-09-17 21:08:17

标签: java for-loop magic-square

我正在创建一个名为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!");
    }
  }
}

1 个答案:

答案 0 :(得分:0)

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

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

让我感到困惑的是,您先是c,然后是r。这似乎表示您打印出屏幕上单行的第一列,然后第二列作为第二行,第三列作为第三行。即整个事物已在对角线上旋转。但也许这只是一个命名问题。