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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用嵌套循环打印出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:
x   x
 x x
  x
 x x
x   x

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

答案

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

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

您可以注意到,从(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')

x   x
 x x 
  x  
 x x 
x   x
另一答案

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

首先,您使用嵌套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
        );
    }
}
另一答案

让我们试试这个简单的代码来打印交叉模式。

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();
        		}
        	}
        }

以上是关于如何使用嵌套循环打印出X.的主要内容,如果未能解决你的问题,请参考以下文章

用C语言循环嵌套语句编出一个三角形形状

如何使它成为嵌套的 For 循环?

求大神支招,python循环打印两个嵌套列表组合

循环的嵌套

JAVA——进阶语法——循环嵌套代码简化思路及案例

嵌套循环 - 使用一个循环的结果,打印结果,然后通过另一个循环发送结果