Guten Abend, hier meine Lösung. Wie immer gilt, viele Wege führen nach Rom.
Ein kleiner Ausblick auf das Ergebnis:
Let's do it!
Zu Beginn bestimme ich die Größe, die jeder String pro Zeile besitzen wird, abhängig von der Länge der Nachricht:
final int length = message.length() + 4;
Nun definiere ich eine Abbruch-Bedingung abhängig von "length", damit keine zu kleinen oder zu großen Strings akzeptiert werden, da bei einem zu kleinen String sonst die Hände nicht mehr dargestellt werden würden:
if (length < 21 || length > 88) return;
Ist der eingegebene String zu klein oder zu groß, wird schlichtweg keine Figur dargestellt.
Als nächstes definiere ich, zur einfacheren Lösung der nächste Schritte, zwei Arrays vom Typ char. Diese werden einmal mit "-", bzw mit Leerzeichen gefüllt:
Edit: eine bessere Lösung dazu mit Schleife und StringBuilder ist im Kommentar zu finden!
final char[] arrBlank = new char[length - 2];
final char[] arrBorder = new char[length - 2];
Arrays.fill(arrBlank, ' ');
Arrays.fill(arrBorder, '-');
Und nun geht es auch schon ran an den Speck!
Wichtig: ich nutze für alle weitere Schritte einen StringBuilder! Bist Du Dir nicht sicher, was der sonst noch alles kann, informiere Dich am besten darüber!
Nun werden alle Teilkomponenten gebaut. Das ist ziemlich trivial und muss eigentlich, wenn man etwas über StringBuilder weiß, nicht weiter erläutert werden.
StringBuilder text = new StringBuilder().append("| ").append(message).append(" |");
- die Zeile über und unter dem Text:
StringBuilder blank = new StringBuilder().append("|").append(arrBlank).append("|");
StringBuilder upperBorder = new StringBuilder().append("|").append(arrBorder).append("|");
upperBorder.replace(length / 2 - 9, length / 2 + 2, "ooO-----(_)");
- der untere Rand der Tafel
StringBuilder lowerBorder = new StringBuilder().append("|").append(arrBorder).append("|");
lowerBorder.replace(length / 2 + 7, length / 2 + 10, "Ooo");
StringBuilder face = new StringBuilder().append(" ").append(arrBlank);
face.replace(length / 2 - 3, length / 2 + 2, "( O O )");
StringBuilder hair = new StringBuilder().append(" ").append(arrBlank);
hair.replace(length / 2 - 3, length / 2 + 2, "\\|||||/");
StringBuilder thights = new StringBuilder().append(" ").append(arrBlank);
thights.replace(length / 2 - 3, length / 2 + 2, "|_| |_|");
StringBuilder calves = new StringBuilder().append(" ").append(arrBlank);
calves.replace(length / 2 - 2, length / 2 + 1, "|| ||");
StringBuilder feet = new StringBuilder().append(" ").append(arrBlank);
feet.replace(length / 2 - 3, length / 2 + 2, "ooO Ooo");
Nachdem alle Teile gebastelt sind, muss man diese nur noch ausgeben:
System.out.println();
System.out.println(hair);
System.out.println(face);
System.out.println(upperBorder);
System.out.println(blank);
System.out.println(text);
System.out.println(blank);
System.out.println(lowerBorder);
System.out.println(thights);
System.out.println(calves);
System.out.println(feet);
Der Aufruf der Funktion könnte so aussehen:
showBillboard("Das ist meine Nachricht! Tadaaa!");
Die Funktion an sich:
private static void showBillboard(String message) {
final int length = message.length() + 4;
if (length < 21 || length > 88) return;
final char[] arrBlank = new char[length - 2];
final char[] arrBorder = new char[length - 2];
Arrays.fill(arrBlank, ' ');
Arrays.fill(arrBorder, '-');
// text to be displayed
StringBuilder text = new StringBuilder().append("| ").append(message).append(" |");
// blank areas over & under text
StringBuilder blank = new StringBuilder().append("|").append(arrBlank).append("|");
// upper border of billboard
StringBuilder upperBorder = new StringBuilder().append("|").append(arrBorder).append("|");
upperBorder.replace(length / 2 - 9, length / 2 + 2, "ooO-----(_)");
// lower border of billboard
StringBuilder lowerBorder = new StringBuilder().append("|").append(arrBorder).append("|");
lowerBorder.replace(length / 2 + 7, length / 2 + 10, "Ooo");
// face
StringBuilder face = new StringBuilder().append(" ").append(arrBlank);
face.replace(length / 2 - 3, length / 2 + 2, "( O O )");
// hair
StringBuilder hair = new StringBuilder().append(" ").append(arrBlank);
hair.replace(length / 2 - 3, length / 2 + 2, "\\|||||/");
// thights
StringBuilder thights = new StringBuilder().append(" ").append(arrBlank);
thights.replace(length / 2 - 3, length / 2 + 2, "|_| |_|");
// calves
StringBuilder calves = new StringBuilder().append(" ").append(arrBlank);
calves.replace(length / 2 - 2, length / 2 + 1, "|| ||");
// feet
StringBuilder feet = new StringBuilder().append(" ").append(arrBlank);
feet.replace(length / 2 - 3, length / 2 + 2, "ooO Ooo");
// output
System.out.println();
System.out.println(hair);
System.out.println(face);
System.out.println(upperBorder);
System.out.println(blank);
System.out.println(text);
System.out.println(blank);
System.out.println(lowerBorder);
System.out.println(thights);
System.out.println(calves);
System.out.println(feet);
}
Die kleinste Tafel könnte so aussehen:
Eine große Tafel so:
Bei weiteren Fragen kannst Du Dich gerne melden!
Grüße, Jacob