Problem mit Strings und toString()-Methode

Hi,
Hab ein Problem mit paar strings. Also ich hab den Konstruktor von ner Klasse, der erhält eine Liste von Zeilenstrings, also z.B. :
Text mw = new Text(“München”, “im”, “Winter”);

Nun soll daraus werden:

München
im
Winter

Anzahl der strings ist unbekannt. Also denk ich mir, dass man es so implimentieren kann,
dass man die Strings in einem Array packt, oder ist das der falsche Ansatz ?!

Also jeder String in ne neue Zeile. Da stolpere ich schonmal, ich komm nicht drauf wie man die einzelnen
Strings jeweils in einer neuen zeile schreibt. Dazu muss ich doch die “toString” methode definieren.
Hab mir das vielleicht so vorgestell, also auf Element zugreigen vom Array, dann System.out.ptintln ();
dann nächstes element usw. kann das funktionieren ?!

Ok darüberhinaus brauch man 3 Getter, einen für die Höhe (hier 3), einen für das längste Word (hier 7)
und einen für den Zeilenindex (im Beispiel i = 1: “im”). Hab mir gedacht, dass eigentlich
die Höhe mit dem Zeilenindex implementieren kann oder ? (Also Index vom Line + 1 = höhe)
bzw. die höhe kann ich doch auch abfragen, indem ich das Array nach der anzahl elementen frag
also
array.length = dann die höhe richtig ?

Das sind aber alles so Ideen, an dennen ich seit paar stunden rumhäng und rumprobier, aber an nichs gescheites und brauchbares komm. Weiss da einer weiter ?

Ich habs mir so überlegt, zumindest teilweise…

public class Text implements Image
{
    String[] s;
    
    Text (String[] args)
    {
        s = args;
    }
    
    public int getHight() 
    {
       return s.length;
    }

    public int getWeight() 
    {
      String maximum = s [0];
      int i = 1;
      while(i < s.length)
      {
         if (s**.length() > maximum.length())
         {
            maximum = s**;
         }
         i++;
      }
      return maximum.length();
  }

   public String toString()
    {
        --------------?
    }

    public String getLine() 
    {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

Wenn ich dann aber die Testklasse aufruf mit:


public static void main(String[] args)
    {
        Text mw = new Text("München", "im", "Winter");
    }

kommt der Fehler, dass bei der Klasse “Text” der Konstruktor mit " Text ( String, String, String) fehlt …
Wie pass ich das jetzt so an ?!

deine Idee ist richtig, aber deine Umsetzung passt nicht ganz das müsste so aussehen

Text mw = new Text(new String[]{"München", "im", "Winter"});

Alternativ kannst du seit Java 5 einen Parameter so definieren das er für beliebig viele steht.

....
public Text(String... texte){....}

jetzt kannst du auch deinen Aufruf so machen wie du ihn wolltest, texte ist hier jetzt eine Art Array

ach toll, hab [] mit … ersetzt geht jetzt thx, ich komm aber immernoch nicht drauf wie ich die einzelnen strings in der toString methode auf neue zeilen setzen kann ?! :frowning:

Eine neue Zeile ist immer
, daher musste eigentlich nur alle Strings mit
verbinden

Ja schon aber genau das check ich gerade irgendwie nicht …

hab mir das so gedacht


public String toString()
    {
        String x = "";
        int i = 0;
        while(i < s.length)
        {
           x = s** + "/n";
        }
        i++;
       return x;
    }

aber beim Test mit:


 public static void main(String[] args)
    {
        Text mw = new Text("München", "im", "Winter");
        System.out.println(mw);
    }

kommt keine ausgabe, das Prog läuft halt die ganze zeit aber eben ohne ergebnis. ???

falsch rum
nicht /n

ou sorry verlesen … habs geändert, und funktioniert trotzdem nicht, also hier nochmal die ganze klasse:


public class Text implements Image
{
    String[] s;
    
    Text (String... args)
    {
        s = args;
    }
    
    public int getHight() 
    {
       return s.length;
    }

    public int getWeight() 
    {
      String maximum = s [0];
      int i = 1;
      while(i < s.length)
      {
         if (s**.length() > maximum.length())
         {
            maximum = s**;
         }
         i++;
      }
      return maximum.length();
  }

    @Override
     public String toString()
    {
        String x = "";
        int i = 0;
        while(i < s.length)
        {
           x = s** + "
";
        }
        i++;
       return x;
    }

    public String getLine(int i)
    {
     return s**;
    }

    public void setLine(int i,String w)
    {
        s** = w;
    }
}

Und womit ich teste nochmal:

public class TT {

    public static void main(String[] args)
    {
        Text mw = new Text("München", "im", "Winter");
        System.out.println(mw);
    }
}

Find irgendwie den fehler nicht :stumm:

Welchen Fehler? Was geht nicht?

ja da kommt keine fehlermeldung, das Programm läuft einfach lange weiter ohne irgendwas anzuzeigen, bis ich es stoppe, weil ichn icht glaube dass es über 40 secunden dauert sowas auszugeben …

War das zu klein geschrieben?

war groß genug -.-
hmm wie soll ichs erklären …
Die ausgabe geht nicht, das Objekr wird erstellt mit

Text mw = new Text("München", "im", "Winter"); 

ok das funktioniert einwandfrei, sobald ich aber eine ausgabe will, die so ausschauen sollte:

München
im
Winter

mit

  System.out.println(mw);  

passiert einfach garnichts, also kommt keine ausgabe, wobei ich mir denke dass etwas an der toString Methode nicht stimmt, aber keinen logischen fehler entdecke. Das Programm läuft einfach zu lange weiter ohne zum Ende zu kommen, wie in ner endlosschleife,… aber ich find eben keine bzw. den Fehler wieso keine Ausgabe kommt.

@Override
     public String toString()
    {
        String x = ""; 
        int i = 0; 
        while(i < s.length) //s.length in dem fall 3 weil es 3 wörter sind
        {
           x = s** + "
";  // nach jedem word wird 
 angehängt für neue zeile,
        }
        i++;
       return x;
    }

Da muss doch irgendwo der Wurm drin sein, aber sehs nicht

Ok, 1. Problem gefunden, mit der Endlosschleife …

schaut jetzt zwar so aus:


   @Override
     public String toString()
    {
        String x = "";
        int i = 0;
        while(i < g.length)
        {
           x = g** + "
";
           i++;
        }
       
       return x;
    }

Bei der ausgabe krieg ich aber nur ein “Winter” und kein München und so davor … ein Plan wieso ?

Ach egal, habs jetzt irgendwie hingekriegt !
danke

Sorry, dass ich erst heute antworte.

Um das Problem einzugrenzen, solltest du dich auf das Wesentliche konzentrieren.
Deine Lösung kann so aussehen:

   private String[] s;

   public Text(String... s) {
      this.s = s;
   }

   public String toString() {
      StringBuilder sb = new StringBuilder();
      for(int i = 0; i < s.length; i++) {
         sb.append(s**).append("
");
      }
      
      return sb.toString();
   }

   public static void main(String[] args) {
      Text mw = new Text("München", "im", "Winter");
      System.out.println(mw);
   }
}```