Проблема форматирования несколькими методами и релевантность переменных - PullRequest
0 голосов
/ 05 апреля 2019

По сути, мои основные проблемы связаны с двумя последними методами в моей программе, drawBlock и drawTiers. Он предназначен для вывода изображения торта, и в то время как он делает, он не делает это так, как он должен был. Например, программа допускает нечетные вводы от 3 до 9 (3,5,7,9) и использует их для определения размера печенья. Вход 3 должен получить нас

              *
              |
              |
          =========
          |..xxx..|
/^^^^^^^^^^^^^^^^^^^^^^^^^^^\ 
[|_______||_______||_______|] 
[|___||_______||_______|___|] 
\===========================/

Пока 5 получит нас

                       *
                       |
                       |
                   =========
                   |..xxx..|
                   |..xxx..|
          |........xxxxxxxxx........|
          |........xxxxxxxxx........|
/^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\ 
[|_______||_______||_______||_______||_______|] 
[|___||_______||_______||_______||_______|___|] 
[|_______||_______||_______||_______||_______|] 
[|___||_______||_______||_______||_______|___|] 
\=============================================/

соответственно. DrawTiers имеет один аргумент int, в то время как drawBlock имеет два. Уровни - это то, что должно определять, насколько широкими являются уровни, так как каждый раз, когда он вызывает drawBlock, предполагается, что второй аргумент увеличивается, что расширяет уровни. Дело в том, что, хотя моя программа содержит значение уровня, она ничего не делает, так как игнорируется, поскольку я кодировал для каждого возможного сценария. Это не то, как это должно быть сделано, и мне интересно, как заставить его правильно использовать значение уровней. Извините, если я не объяснил должным образом, но я был бы признателен за любую помощь. Также «sizeParam» - это то, что пользовательский ввод отправляет в метод.

public static void drawBlock (int sizeParam, int tierParam) {
        if (sizeParam == 3) {
            System.out.printf("%20s", "|..xxx..|\n");
        }
        else if (sizeParam == 5) {
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%29s", "|..xxx..|\n");
            }
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%38s", "|........xxxxxxxxx........|\n");
            }
        }
        else if (sizeParam == 7) {
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%38s", "|..xxx..|\n");
            }
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%47s", "|........xxxxxxxxx........|\n");
            }
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%56s", "|..............xxxxxxxxxxxxxxx..............|\n");
            }
        }
        else if (sizeParam == 9) {
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%47s", "|..xxx..|\n");
            }
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%56s", "|........xxxxxxxxx........|\n");
            }
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%65s", "|..............xxxxxxxxxxxxxxx..............|\n");
            }
            for (int count = 0; count < sizeParam/2; count++) {
                System.out.printf("%74s", "|....................xxxxxxxxxxxxxxxxxxxxx....................|\n");
            }
        }
    }

    public static void drawTiers (int tiersParam) {
        for (int count = 0; count <= tiersParam/10; count++) {
            int size = tiersParam;
            drawBlock(size, tiersParam + 1);
    }
    }

1 Ответ

0 голосов
/ 05 апреля 2019

Ключ должен печатать символы вместо полных строк.С этим вы можете манипулировать тем, что должно быть напечатано на уровне, на основе параметра размера.

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

public static void drawTiersNew (int tiersParam) {
    for (int level = 0; level < tiersParam/2 ; level++) {
        drawBlockNew(level, tiersParam/2);
    }
}

public static void drawBlockNew (int level, int tierParam) {
   for (int repeat = 1; repeat <= tierParam; repeat++) {
        for (int count = 0; count < (tierParam - level)*9 ; count++) {
            System.out.print(' ');
        }
        System.out.print('|');
        for (int count = 0; count < (2 + 6 * level) ; count++) {
            System.out.print('.');
        }
        for (int count = 0; count < (3 + 6 * level); count++) {
            System.out.print('x');
        }
        for (int count = 0; count < (2 + 6 * level); count++) {
            System.out.print('.');
        }
        System.out.print('|');
        System.out.print('\n');
    }
}

А вот что он печатает для drawTiersNew (9)

                                    |..xxx..|
                                    |..xxx..|
                                    |..xxx..|
                                    |..xxx..|
                           |........xxxxxxxxx........|
                           |........xxxxxxxxx........|
                           |........xxxxxxxxx........|
                           |........xxxxxxxxx........|
                  |..............xxxxxxxxxxxxxxx..............|
                  |..............xxxxxxxxxxxxxxx..............|
                  |..............xxxxxxxxxxxxxxx..............|
                  |..............xxxxxxxxxxxxxxx..............|
         |....................xxxxxxxxxxxxxxxxxxxxx....................|
         |....................xxxxxxxxxxxxxxxxxxxxx....................|
         |....................xxxxxxxxxxxxxxxxxxxxx....................|
         |....................xxxxxxxxxxxxxxxxxxxxx....................|

...