加模式的水平重新排列

时间:2018-11-20 02:09:42

标签: java loops printing

我必须生成以下模式:

https://imgur.com/p2xbj9Y

我到目前为止:

https://imgur.com/0RrIDh1

模式中有一些重复的行也是一个问题,但是目前没有很高的优先级。 我的问题是要在水平方向上重复这种模式。

这是我到目前为止的代码:

public class Pattern {

public static void main(String[] args) {

    final char indentChar = ' ';
    final char fillChar = '+';
    int fillWidth;
    int indentWidth;
    int triangleBaseLength = 9;
    int triangleHeight = (triangleBaseLength / 2) + 1;


    int horizontalRepeats = 5;
    int verticalRepeats = 2;

     for (int y = 1; y <= verticalRepeats; y++) { //vertical Repeats                   

           for (int i = 0; i < triangleHeight; i++) { //Top downwards                                                    
                 for (indentWidth = 0; indentWidth < triangleHeight * 0 + i; indentWidth++) {      
                       System.out.print(indentChar);

                }

                 for (fillWidth = 0; fillWidth < (triangleBaseLength - i * 2); fillWidth++) {               
                       System.out.print(fillChar);

                }

                 System.out.println();

                }

                 for (int i = 1; i <= triangleHeight; i++) { //Top upwards                                                    
                   for (indentWidth = 0; indentWidth < triangleHeight * 1 - i; indentWidth++) {                
                         System.out.print(indentChar);

                   }

                   for (fillWidth = 0; fillWidth < (i * 2 - 1); fillWidth++) {                                

                         System.out.print(fillChar);


                   }

                    System.out.println(); //vertical Repeats

                }
}

}

为了生成水平重复,我尝试使用“(int y = 1; y <= horizo​​ntalRepeats; y ++)”和“ System.out.print();”进行相同的操作但它不起作用。 有一个简单的解决方案吗?我不允许使用比这更高级的东西。

1 个答案:

答案 0 :(得分:0)

首先,您还应该在+符号的右侧包括空白。这意味着您不必添加2个for循环来打印出每一行,而必须添加另一个for循环,该循环与第一个for循环相同。

第二,您需要包装这3个for循环,以便另一个for循环才能水平重复。

for (int i = 0; i < triangleHeight; i++) { //Top downwards

    for (int h = 0; h < horizontalRepeats; h++) {
        for (indentWidth = 0; indentWidth < triangleHeight * 0 + i; indentWidth++) {
            System.out.print(indentChar);
        }

        for (fillWidth = 0; fillWidth < (triangleBaseLength - i * 2); fillWidth++) {
            System.out.print(fillChar);
        }

        // Repeat the first for loop...
        for (indentWidth = 0; indentWidth < triangleHeight * 0 + i; indentWidth++) {
            System.out.print(indentChar);
        }
    }

    System.out.println();
}

但是,这不能解决多余的行的问题。我会让你自己弄清楚。