如何使用嵌套循环打印出X.

我已经搜索过这个问题的简单解决方案。

我有一个叫做的方法

printCross(int size,char display) 

它接受一个大小并打印一个X,其中包含它接收的高度和宽度的char变量。

调用方法printShape(int maxSize, char display)接受形状的最大大小并循环,向printCross方法发送2的倍数,直到达到最大值。

这是我的代码,但它没有给我预期的结果。

 public static void drawShape(char display, int maxSize) { int currentSize = 2; //start at 2 and increase in multiples of 2 till maxSize while(currentSize<=maxSize) { printCross(currentSize,display); currentSize = currentSize + 2;//increment by multiples of 2 } } public static void printCross(int size, char display) { for (int row = 0; row<size; row++) { for (int col=0; col<size; col++) { if (row == col) System.out.print(display); if (row == 1 && col == 5) System.out.print(display); if (row == 2 && col == 4) System.out.print(display); if ( row == 4 && col == 2) System.out.print(display); if (row == 5 && col == 1) System.out.print(display); else System.out.print(" "); } System.out.println(); } } 

是因为我把数字硬编码到循环中吗? 我做了很多数学运算,但不幸的是,只有这样才能达到我想要的输出。

 If the printCross() method received a size of 5 for instance, the output should be like this: xx xx x xx xx 

请我花上几周的时间,似乎无处可去。 谢谢

您要做的第一件事是找到索引之间的关系 。 假设您有长度size的方阵(示例中size = 5 ):

  0 1 2 3 4 0 xx 1 xx 2 x 3 xx 4 xx 

您可以注意到,在从(0,0)(4,4)的对角线中,索引是相同的(在代码中这意味着row == col )。

此外,您可以注意到,在从(0,4)(4,0)索引的对角线中,索引始终总计为4 ,即size - 1 (在代码中,这是row + col == size - 1 )。

因此,在代码中,您将循环遍历行,然后遍历列(嵌套循环)。 在每次迭代时,您必须检查是否满足上述条件。 逻辑OR( || )运算符用于避免使用两个if语句。

码:

 public static void printCross(int size, char display) { for (int row = 0; row < size; row++) { for (int col = 0; col < size; col++) { if (row == col || row + col == size - 1) { System.out.print(display); } else { System.out.print(" "); } } System.out.println(); } } 

输出:( (size = 5, display = 'x')

 xx xxxxxxx 

我会给你一些提示,而不是直接回答。

首先,您使用嵌套for循环是正确的。

但是,正如您所注意到的,您可以确定何时为5的情况打印’x’。

当且仅当row = col或row + col = size – 1时,检查是否打印’x’

对于你的printCross方法,试试这个:

 public static void printCross(int size, char display) { if( size <= 0 ) { return; } for( int row = 0; row < size; row++ ) { for( int col = 0; col < size; col++ ) { if( col == row || col == size - row - 1) { System.out.print(display); } else { System.out.print(" "); } } System.out.println(); } } 

啊,我被它打败了xD

这是一个简短,丑陋的解决方案,它不使用任何空白字符串或嵌套循环。

 public static void printCross(int size, char display) { for (int i = 1, j = size; i <= size && j > 0; i++, j--) { System.out.printf( i < j ? "%" + i + "s" + "%" + (j - i) + "s%n" : i > j ? "%" + j + "s" + "%" + (i - j) + "s%n" : "%" + i + "s%n", //intersection display, display ); } } 

Lte尝试使用这个简单的代码来打印交叉模式。

 class CrossPattern { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("enter the number of rows=column"); int n = s.nextInt(); int i, j; s.close(); for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { if (j == i) { System.out.print("*"); } else if (j == n - (i - 1)) { System.out.print("*"); } else { System.out.print(" "); } } System.out.println(); } } }