Wo müsste ich im Code eine Änderung vornehmen?

Reykja

Aktives Mitglied
Es wird am Anfang und am Ende von text das Zeichen tag so oft eingefügt, wie der String text lang ist.
addTags("A", ’?’) liefert ?A?
addTags("Hello!", ’:’) liefert ::::::Hello!::::::
-----------------------------------------------
"text0" wird bei mir richtig ausgegeben also ?A?
"text2" wiederum falsch also ::::Hello!:::::::: (weniger Doppelpunkte auf der linken Seite)
mir ist bewusst warum "text2" falsch ausgegeben wird, nur weiß ich nicht, wo ich im Code etwas ändern muss.

Java:
 private static void addTags(String text, char tag) {

        if (text.length() != 0){
            for (int i = 0; i < text.length() * 2; i++) {
                System.out.print(tag);
                if (i == text.length() / 2)
                    System.out.print(text);
            }
            System.out.println();
        }
    }

public static void main(String[] args) {
        String text0 = "A";
        String text2 = "Hello!";
        
        addTags(text0, '?');
        addTags(text2, ':');
}
 
"mir ist bewusst warum "text2" falsch ausgegeben wird"

Möchtest du es auch erklären? Und die Idee hinter der Bedingung
"if (i == text.length() / 2)"
solltest du noch mal erklären.
 
Warum löst du das Ganze nicht einfach mit zwei Schleifen?
Und eigentlich finde ich es immer relativ unschön, wenn solche "Utility"-Methoden I/O machen.
Ich würde in der Methode einen entsprechenden String zusammenbauen und diesen dann zurückgeben.
Der Aufrufer kann diesen dann, wenn er will, ausgeben.
Z.B.:
Java:
private static String repeat(char c, int n) {
  char[] cs = new char[n];
  Arrays.fill(cs, c); // <- Die Schleife steckt implizit hier drin
  return new String(cs);
}
public static String addTags(String text, char tag) {
  String repeated = repeat(tag, text.length());
  return repeated + text + repeated;
}
 

Zurück
Oben