Шаблон Java, используемый для цикла, застрял в последней части - PullRequest
0 голосов
/ 20 ноября 2018

Вот мой код, я пытаюсь получить определенный шаблон, но у меня получился неожиданный шаблон.

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 голосов
/ 20 ноября 2018

Строка, которую вы печатаете, представляет собой последовательность пробелов '' и звездочек '*'.Его длина всегда равна 13. Таким образом, сумма spaces и stars должна составлять 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...