Помогите решить задачу на джава
Не получается оформить вывод основной функции. Смысл заключается в том, что кол-во знаков "!" возрастает каждый раз на один. Но если вывод этих знаков упирается в стенку "|", то вывод переносится на другую строчку. Всё происходит в зависимости от параметров высоты и ширины.
Язык 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();
}
}
Ответы (1 шт):
Суть - в основном цикле формируются последовательности ! длиной 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");
}
}
-------------
|! |
| !! |
| !!! |
| !!!! |
| !!!|
|!! |
| !!!!!! |
| !!!!!|
|!! |
| !!!!!!!! |
| !!!|
|!!!!!! |
| !!!!!!!|
|!!! |
| !!!!!!!!!!|
-------------

