String als Parameter



  • Hi,

    ich denke jeder c++ler hat dieses Problem; deshalb vorweg
    ein sorry, falls diese Frage zum x-ten Mal gestellt wird:

    Bei einer Funktion

    void f(String as)
    

    soll duch den Aufruf f(s), s durch f geändert werden.
    Muss man da extra eine Art Wrapperklase drumbauen, damit das geht ?

    P.S.: Es geht um's Prinzip, also bitte nicht antworten, dass String der
    return Typ seien soll.

    Jockel



  • ehrlich gesagt weiss ich nicht, was du genau machen möchtest.

    du willst
    void f(String s)
    aufrufen und dann den String verändern, der dir übergeben wurde?



  • das geht mit Strings nicht.
    Wenn du einen String erzeugst,
    kannst du ihn nicht wieder verändern.

    [ Dieser Beitrag wurde am 20.02.2003 um 12:48 Uhr von Ingo aka Desert Hawk editiert. ]


  • Mod

    In Java löst man das, indem man in der Funktion einen neuen String erzeugt und diesen dann zurück gibt. ...die Funktion hat dann also kein void als Rückgabewert mehr, sondern String!

    EDIT : Ups! ...hab dein PS nicht gesehen!

    [ Dieser Beitrag wurde am 20.02.2003 um 12:54 Uhr von Gregor editiert. ]


  • Mod

    Dirty Hack:

    Übergib keinen String, sondern ein "String []". Dann kannst du den String in dem Array austauschen, ohne dass du einen String zurückgeben mußt! Das ist aber extrem hässlich, nicht üblich, doof,...!



  • Würdest du ein anderes Objekt als Strings nehmen, dann hast gute chancen, dass du die Eigenschaften des Objektes verändern kannst ohne es als Rückgabewert zurückzugeben.

    [ Dieser Beitrag wurde am 20.02.2003 um 13:00 Uhr von Ingo aka Desert Hawk editiert. ]



  • Danke,

    hab ich auch schon vermutet.
    Das man die Art der Paramete-Übergabe in Java nicht angeben darf,
    halte ich eh für den grössten Mist!

    Jockel


  • Mod

    ...aber weil es dir ums Prinzip geht:

    Man programmiert in Java prinzipiell anders als in C++. Versuche besser nicht, Java eine C++-Programmiertechnik aufzudrängen! ...auch andersherum ist das sinnlos! Wenn du etwas 1:1 übertragen willst, dann führt das zu Code, der einfach nur Mist ist!



  • hehe, ich wusste, dass sowas kommt!
    dann hast du unsere beiträge nicht richtig gelesen!

    In C++ würde das auch nicht gehen, wäre die string klasse so geschrieben wie in java

    [ Dieser Beitrag wurde am 20.02.2003 um 13:03 Uhr von Ingo aka Desert Hawk editiert. ]



  • In C++ würde das auch nicht gehen, wäre die string klasse so geschrieben wie in java

    Das geht schon, egal wie String geschrieben ist (wenn auch unschön):

    void f(String*& s)
    {
      s = new String("bla");
    }
    

    Jockel



  • ok stimmt. es geht ... jetzt seh ichs auch 🙂
    Aber ob das gute OOP ist wag ich zu bezweifeln 😉
    Aber ich lass mich gerne vom Gegenteil überzeugen.
    Da ich mich in C++ erst noch richtig einarbeiten muss, hab ich da noch nicht sooo die Erfahrnungen mit.

    [ Dieser Beitrag wurde am 20.02.2003 um 13:18 Uhr von Ingo aka Desert Hawk editiert. ]



  • Nein,
    ich hab ja auch schon geschrieben, dass das
    so nicht gut ist. Ging nur darum das es geht.
    Anderseits reicht in c++ ja ein f(String& s),
    woran sicherlich nichts auszusetzen ist.

    Jockel



  • StringBuffer Klasse ist dein Freund. Der String ist
    unveränderbar eigentlich.
    StringBuffer ist für sämmtliche Veränderrungen gedacht.
    Und somit funktioniert das ändern über Refernz auch.

    String myString = "string wurde ";
    StringBuffer sbf = StringBuffer(myString);
    f(sbf);
    System.out.println(sbf.toString());
    
    private void f(StringBuffer sbf) {
     sbf.append(" geändert");
    }
    
    Ausgabe:
    string wurde geändert
    


  • Jau Danke HolyFly,

    ich glaube, ich werde mich aber besser an das von Java aufgezwungene Design
    halten, sprich Werte einer Methode nur über return zurückgeben.

    Muss man sich halt dran gewöhnen.

    Jockel


Anmelden zum Antworten