Java模式使用for循环,卡在最后一部分

时间:2018-11-20 18:04:15

标签: java loops for-loop

这是我的代码,我试图获取特定的模式,但最终遇到了意外的模式。

for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < i * 2; j++)
        {
            if (i != 3)
            {
                System.out.print(" ");
            }
            else
            {
                System.out.print("*");
            }
        }

        for(int k = 13; k > i * 2; k--)
        {   
            System.out.print("*");  
        }

        System.out.println();
    }

我得到了:

*************
  ***********
    *********
*************
        *****

什么时候应该得到这个:

*************
  ***********
    *********
  ***********
*************

有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:3)

您打印的行是一个空格''和星号'*'的序列。它的长度始终为13。因此spacesstars的总和必须为13。

每打印一条线,就会在行中添加2个空格并删除2个星号,直到到达发生反向操作的点(该点为9个星号)为止。

此代码将打印该图案。

public class Pattern{

    private static final int MAX_LINE_LENGTH = 13;
    private static final int MIN_LINE_LENGTH = 9;
    private static final int DIFFERENCE = 2;
    private static final int LINES = 5;

    private static final String SPACE = " ";
    private static final String STAR = "*";

    public static void main(String[] args) {
        printPattern();
    }

    private static void printPattern(){
        int spaces = 0;
        int stars = MAX_LINE_LENGTH;
        boolean reverse = false;

        for (int i=0; i<LINES; i++) {
            printLine(spaces,stars);

            if (stars == MIN_LINE_LENGTH) {
                reverse = true;
            }

            if (reverse == false) {
                spaces+=DIFFERENCE;
                stars-=DIFFERENCE;  
            }else{
                spaces-=DIFFERENCE;
                stars+=DIFFERENCE;
            }       
        }
    }

    private static void printLine(int spaces, int stars){
        StringBuilder builder = new StringBuilder();
        for (int i=0; i<spaces+stars; i++) {
            if (i<spaces) {
                builder.append(SPACE);      
            }else{
                builder.append(STAR);               
            }
        }
        System.out.println(builder.toString());
    }
}