From 84d1c4f9e0d03ed5f52852d65ca319e2daabdf88 Mon Sep 17 00:00:00 2001 From: "Daniel S." <50729918+Ohrhusten@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:29:44 +0000 Subject: [PATCH] Gruppe 4 --- .../de/cas/mse/exercise/diamond/Diamond.java | 51 ++++++++++++++----- .../cas/mse/exercise/diamond/DiamondTest.java | 10 ++-- 2 files changed, 42 insertions(+), 19 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..55a13b4 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,51 @@ public class Diamond { - public String print(int n) { - if (n <= 0 || n % 2 == 0) { + private static final char LINEBREAK = '\n'; + private static final char FILLER = '*'; + private static final char BLANK = ' '; + + public String getFromSize(int maxSize) { + if (isInvalidSize(maxSize)) { 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); + return createDiamond(maxSize); + } + + private String createDiamond(int maxSize) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < maxSize; i++) { + builder.append(getDiamondLine(maxSize, getLineSize(i, maxSize))); } 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 int getLineSize(int lineIndex, int maxSize) { + if (isLineOnUpperSide(lineIndex, maxSize)) { + return lineIndex * 2 + 1; } - Arrays.fill(chars, amount, amount + j, '*'); - chars[chars.length - 1] = '\n'; + return (maxSize - lineIndex - 1) * 2 + 1; + } + + private boolean isLineOnUpperSide(int lineIndex, int maxSize) { + return lineIndex <= maxSize / 2; + } + + private boolean isInvalidSize(int n) { + return n <= 0 || n % 2 == 0; + } + + private char[] getDiamondLine(int maxSize, int lineSize) { + int whiteSpaceCount = getWhiteSpaceCount(maxSize, lineSize); + char[] chars = new char[whiteSpaceCount + lineSize + 1]; + Arrays.fill(chars, 0, whiteSpaceCount, BLANK); + Arrays.fill(chars, whiteSpaceCount, whiteSpaceCount + lineSize, FILLER); + chars[chars.length - 1] = LINEBREAK; return chars; } + private int getWhiteSpaceCount(int maxSize, int lineSize) { + return (maxSize - lineSize) / 2; + } + } diff --git a/src/test/java/de/cas/mse/exercise/diamond/DiamondTest.java b/src/test/java/de/cas/mse/exercise/diamond/DiamondTest.java index d250a48..d98abd5 100644 --- a/src/test/java/de/cas/mse/exercise/diamond/DiamondTest.java +++ b/src/test/java/de/cas/mse/exercise/diamond/DiamondTest.java @@ -13,7 +13,7 @@ public void diamond3_shouldPrint() { expected.append("***\n"); expected.append(" *\n"); - String actual = new Diamond().print(3); + String actual = new Diamond().getFromSize(3); assertEquals(expected.toString(), actual); System.out.println(actual); } @@ -27,23 +27,23 @@ public void diamond5_shouldPrint() { expected.append(" ***\n"); expected.append(" *\n"); - String actual = new Diamond().print(5); + String actual = new Diamond().getFromSize(5); assertEquals(expected.toString(), actual); System.out.println(actual); } @Test public void diamond0_shouldReturnNull() { - assertEquals(null, new Diamond().print(0)); + assertEquals(null, new Diamond().getFromSize(0)); } @Test public void diamondNegative_shouldReturnNull() { - assertEquals(null, new Diamond().print(-1)); + assertEquals(null, new Diamond().getFromSize(-1)); } @Test public void diamondEven_shouldReturnNull() { - assertEquals(null, new Diamond().print(10)); + assertEquals(null, new Diamond().getFromSize(10)); } }