From 36a92ed57fe30862f1fd2f36d979e6d8066e7d13 Mon Sep 17 00:00:00 2001 From: SebastianFeurer <44814514+SebastianFeurer@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:30:34 +0000 Subject: [PATCH] Gruppe 1 --- .../de/cas/mse/exercise/diamond/Diamond.java | 63 ++++++++++++++----- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/cas/mse/exercise/diamond/Diamond.java b/src/main/java/de/cas/mse/exercise/diamond/Diamond.java index efbf7bd..a13e2aa 100644 --- a/src/main/java/de/cas/mse/exercise/diamond/Diamond.java +++ b/src/main/java/de/cas/mse/exercise/diamond/Diamond.java @@ -4,28 +4,61 @@ public class Diamond { - public String print(int n) { - if (n <= 0 || n % 2 == 0) { + private static final char WHITESPACE = ' '; + private static final char LINEBREAK = '\n'; + private static final char STAR = '*'; + + public String print(int width) { + if (isInvalidWidth(width)) { return null; } - StringBuilder builder = new StringBuilder(new String(make(n, n))); - for (int i = n - 2; i > 0; i -= 2) { - char[] chars = make(n, i); - builder.insert(0, chars); - builder.append(chars); + StringBuilder builder = generateBuilderWithMiddleRowInserted(width); + for (int i = width - 2; i > 0; i -= 2) { + char[] row = generateRow(width, i); + builder.insert(0, row); + builder.append(row); } return builder.toString(); } - private char[] make(int i, int j) { - int amount = ((i - j) / 2); - char[] chars = new char[amount + j + 1]; - if (amount > 0) { - Arrays.fill(chars, 0, amount, ' '); + private StringBuilder generateBuilderWithMiddleRowInserted(int width) { + return new StringBuilder(new String(generateRow(width, width))); + } + + private boolean isInvalidWidth(int width) { + return isNegativ(width) || isEven(width); + } + + private boolean isEven(int width) { + return width % 2 == 0; + } + + private boolean isNegativ(int width) { + return width <= 0; + } + + private char[] generateRow(int maxRowWidth, int starCountForRow) { + int frontPaddingSize = ((maxRowWidth - starCountForRow) / 2); + char[] row = new char[frontPaddingSize + starCountForRow + 1]; + insertFrontPadding(frontPaddingSize, row); + insertStars(starCountForRow, frontPaddingSize, row); + insertLineBreak(row); + return row; + } + + private void insertLineBreak(char[] row) { + row[row.length - 1] = LINEBREAK; + } + + private void insertStars(int starCountForRow, int offset, char[] row) { + int toIndex = offset + starCountForRow; + Arrays.fill(row, offset, toIndex, STAR); + } + + private void insertFrontPadding(int whitespaceCount, char[] row) { + if (whitespaceCount > 0) { + Arrays.fill(row, 0, whitespaceCount, WHITESPACE); } - Arrays.fill(chars, amount, amount + j, '*'); - chars[chars.length - 1] = '\n'; - return chars; } }