Помогите упростить функцию drawRect(int w, int h);. Понимаю, костыли за костылями, но на ошибках учатся. Мне важны какие то специальные методы для упрощения.
package com.company;
public class Main {
public static void drawRect(int w, int h) {
for (int i = 0; i < w; i++) {
if (i == 0)
System.out.print("╔");
else if (i == (w - 1))
System.out.print("╗");
else
System.out.print("═");
}
System.out.print("
");
for (int i = 0; i < h; i++) {
if (i != h - 1) {
System.out.print("║");
for (int j = 0; j < (w - 2); j++) {
System.out.print(" ");
}
System.out.println("║");
}
else {
System.out.print("╚");
for (int j = 0; j < (w - 2); j++) {
System.out.print("═");
}
System.out.println("╝");
}
}
}
public static void main(String[] args) {
drawRect(30, 10);
}
}
На выходе рисует
╔════════════════════════════╗
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
╚════════════════════════════╝
Ответ
В примитивном виде:
public static String stringRepeat(String str, int times) {
return new String(new char[times]).replace("\0", str);
}
public static void drawRect(int w, int h) {
System.out.print("╔");
System.out.print(stringRepeat("=", w - 2));
System.out.println("╗");
for (int i = 0; i < h - 2; i++) {
System.out.print("║");
System.out.print(stringRepeat(" ", w - 2 ));
System.out.println("║");
}
System.out.print("╚");
System.out.print(stringRepeat("=", w - 2));
System.out.println("╝");
}
Далее вместо множества System.out можно загонять с помощью StringBuilder в отдельную переменную и в конце вывести
Для string.repeat можно использовать apache StringUtils
Комментариев нет:
Отправить комментарий