我正在创建一个名为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!");
}
}
}
答案 0 :(得分:0)
< 10
和< 100
的部分:如果一个数字在0到9之间,它只会打印出一个数字。如果它在10到99之间,它将打印出两个。如果它在100到999之间,它将使用三位数打印出来。 (似乎这段代码是为了假设它只会遇到0到999之间的数字。一般来说,最好确保以某种方式而不仅仅是希望。)
因此,使用if
语句及其额外空格,“5”将打印为“5”(注意两个前导空格,总共三个字符)。 25将打印为“25”(同样,三个字符),125打印为“125”(再次三位数)。由于所有数字都使用三个字符打印出来,所以所有内容都会整齐排列在列中。
让我感到困惑的是,您先是c
,然后是r
。这似乎表示您打印出屏幕上单行的第一列,然后第二列作为第二行,第三列作为第三行。即整个事物已在对角线上旋转。但也许这只是一个命名问题。