Объяснение
Измените ваши методы, чтобы они не печатали, а вместо этого создавали List<String>
. После этого вы можете легко объединить оба выхода в один.
Большим преимуществом является то, что этот подход более модульный. Вы можете комбинировать это любым способом или любыми другими методами.
Вот как бы вы его использовали:
List<String> squareLines = drawSquare(4, 4);
List<String> triangleLines = drawTriangle(4);
// Iterate both lists
Iterator<String> squareLineIter = squareLines.iterator();
Iterator<String> triangleLineIter = triangleLines.iterator();
while (squareLineIter.hasNext() && triangleLineIter.hasNext()) {
String squareLine = squareLineIter.next();
String triangleLine = triangleLineIter.next();
// Print the combined line
System.out.println(squareLine + " " + triangleLine);
}
Обратите внимание, что при этом пропускаются оставшиеся строки более длинного списка. Вы можете легко поддерживать разные размеры, заполнив меньший список пустыми строками.
Изменения
Поэтому измените ваши методы для построения и возврата списков.
Создать результат, изначально пустой, используя
List<String> lines = new ArrayList<>();
Постройте линию, используя StringBuilder
StringBuilder lineBuilder = new StringBuilder();
lineBuilder.append("* "); // Repeat that in a loop
String line = lineBuilder.toString();
Добавьте line
к вашему lines
, используя
lines.add(line);
Вот ваши полностью измененные методы:
public static List<String> drawTriangle(int n) {
// Build the lines
List<String> lines = new ArrayList<>();
int k = 2 * n - 5;
for (int i = 0; i < n; i++) {
// Build the current line
StringBuilder lineBuilder = new StringBuilder();
for (int j = 0; j < k; j++) {
lineBuilder.append(" ");
}
k = k - 1;
for (int j = 0; j <= i; j++) {
lineBuilder.append("* ");
}
// Add the line
lines.add(lineBuilder.toString());
}
return lines;
}
public static List<String> drawSquare(int width, int height) {
// Build the lines
List<String> lines = new ArrayList<>();
// Build a line
StringBuilder lineBuilder = new StringBuilder();
for (int i = 0; i < height; i++) {
lineBuilder.append("* ");
}
// Add the line
lines.add(lineBuilder.toString());
for (int i = 0; i < width - 2; i++) {
// Build the current line
lineBuilder = new StringBuilder();
lineBuilder.append("* ");
for (int j = 0; j < height - 2; j++) {
lineBuilder.append("* ");
}
lineBuilder.append("* ");
// Add the line
lines.add(lineBuilder.toString());
}
// Build a line
lineBuilder = new StringBuilder();
for (int i = 0; i < height; i++) {
lineBuilder.append("* ");
}
// Add the line
lines.add(lineBuilder.toString());
return lines;
}