Untitled
unknown
java
3 years ago
2.7 kB
9
Indexable
import java.util.Scanner;
public class Main {
// Метод для печати символа N раз (в 1 строку)
public static void drawCharacter(char character, int times) {
for (int i = 1; i <= times; i++) {
System.out.print(character);
}
}
// Метод для отрисовки горизонтальной границы рисунка
public static void drawHorizontalBound(int effectiveWidth, boolean breakLine) {
drawCharacter(' ', 1);
drawCharacter('-', effectiveWidth);
drawCharacter(' ', 1);
if (breakLine) {
System.out.println();
}
}
// Метод для вычисления ЭФФЕКТИВНОЙ высоты рисунка (то есть не включающей
// верхнюю и нижнюю границы)
public static int calculateHeight(int effectiveWidth) {
int height = 1;
int decreaseNumber = 0;
for (int i = effectiveWidth - 1; i > 0; i -= decreaseNumber) {
if (i - decreaseNumber <= 0) {
return height;
} else {
height += 2;
}
decreaseNumber++;
}
return height;
}
public static void drawLine(int effectiveWidth, int startIndex, int count) {
drawCharacter('|', 1);
drawCharacter(' ', startIndex);
// Обрубание символов если сумма отступа и их количества больше допустимой ширины
if (count + startIndex > effectiveWidth) {
while (count + startIndex > effectiveWidth) {
count--;
}
}
drawCharacter('!', count);
drawCharacter(' ', effectiveWidth - startIndex - count);
drawCharacter('|', 1);
System.out.println();
}
public static void drawPicture(int srcWidth) {
int effectiveWidth = srcWidth - 2;
int height = calculateHeight(effectiveWidth);
drawHorizontalBound(effectiveWidth, true);
int i;
int currOffset = 0;
for (i = 1; i <= (height-1)/2; i++) {
drawLine(effectiveWidth, currOffset, i);
currOffset += i;
}
for (i = (height-1)/2; i >= 0; i--){
drawLine(effectiveWidth, currOffset, i + 1);
currOffset -= i;
}
drawHorizontalBound(effectiveWidth, true);
}
public static void main(String[] args) {
System.out.print("Введите w: ");
Scanner scanner = new Scanner(System.in);
int w = scanner.nextInt();
System.out.println();
drawPicture(w);
}
}Editor is loading...