Страницы

Поиск по вопросам

понедельник, 25 марта 2019 г.

Помогите упростить функцию

Помогите упростить функцию 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

Комментариев нет:

Отправить комментарий