Помогите решить задачу на джава

Рейтинг: -2Ответов: 1Опубликовано: 15.01.2023

Не получается оформить вывод основной функции. Смысл заключается в том, что кол-во знаков "!" возрастает каждый раз на один. Но если вывод этих знаков упирается в стенку "|", то вывод переносится на другую строчку. Всё происходит в зависимости от параметров высоты и ширины.

Язык java. Прямо сейчас сижу в IDEA, с тегом ошибся.

Правда помощь нужна, мне сегодня нужно задачу сдать.

public class Main {
public static void main(String[] args) {
    int width = 14;
    int height = 17;
    height -= 2;
    drawEveryThing(width, height);
}

private static void drawEveryThing(int w, int h) {
    drawHeader(w);
    drawFunc(w, h);
    drawHeader(w);
}

private static void drawHeader(int w) {
    System.out.print(" ");
    for (int i = 0; i < w - 1; i++) {
        System.out.print("-");
    }
    System.out.println(" ");
}

private static void drawFunc(int w, int h) {
    String b = "";
    String c = " ";

    for (int i = 0; i < h; i++) {
        int i1 = 0;
        i1 += i;
        System.out.print("|");
        for (int k = 0; k < i1; k++) {
            b += " ";
        }
        System.out.print(b);


        for (int j = 0; j < i + 1; j++) {
            System.out.print("!");
            if (b.length() + j + 2 == w) {
                System.out.print("|");
                System.out.println();
                System.out.print("|");
            }
        }

        for (int j = 0; j < w - b.length() - 2 - i; j++) {
            System.out.print(c);
        }
        System.out.print("|");
        System.out.println();
    }
}

} ЗадачаМой вывод

Ответы

▲ 0

Суть - в основном цикле формируются последовательности ! длиной 1,2,3 и т.д. После каждой серии, а также после достижения ширины, кратной ширине стакана(определяем как остаток от деления на ширину), происходит перенос строки. Завершается цикл, когда кол-во переносов строк == высоте стакана.

public class Main {
    public static void main(String[] args) {
        int width = 14;
        int height = 17;
        height -= 2;
        drawEveryThing(width, height);
    }

    private static void drawEveryThing(int w, int h) {
        drawHeader(w);
        drawFunc(w, h);
        drawHeader(w);
    }

    private static void drawHeader(int w) {
        System.out.print(" ");
        for (int i = 0; i < w - 1; i++) {
            System.out.print("-");
        }
        System.out.println(" ");
    }

    private static void drawFunc(int w, int h) {
        String b = "";
        int i = 1;          // счетчик длины серий
        int carry = 1;      // счетчик переносов строк
        int counter = 0;    // счетчик длины общей последовательности !

        System.out.print("|");
        while (true) {
            System.out.print(b);
            for (int j = 0; j < i; j++) {
                if (counter > 0 & counter++ % (w - 1) == 0) {
                    if (carry >= h) break;
                    System.out.print("|\n|");
                    carry++;
                    b = "";
                }
                System.out.print("!");
                b += " ";
            }
            if (carry >= h) break;
            i++;
            carry++;
            for (int k = b.length() + 1; k < w; k++) {
                System.out.print(" ");
            }
            System.out.print("|\n|");
        }
        System.out.print("|\n");
    }
}
 ------------- 
|!            |
| !!          |
|   !!!       |
|      !!!!   |
|          !!!|
|!!           |
|  !!!!!!     |
|        !!!!!|
|!!           |
|  !!!!!!!!   |
|          !!!|
|!!!!!!       |
|      !!!!!!!|
|!!!          |
|   !!!!!!!!!!|
 -------------