if else problematik

  • hallo, ich habe zwei fragen vielleicht kann mir ja hier jemand helfen (x

    bei folgendem code:

    ich verstehe nicht wieso bei meinem einfachen code hier das letzte return nötig ist und wieso

    Code
    else if (zuErraten.gleich(input)) {return "Gratulation! Zahl erraten!";}


    einfach übergangen wird?
    genau wie später hier:

    Code
    if (x=="Gesuchte Zahl ist kleiner.") {...}
            if (x=="Gesuchte Zahl ist größer.") {...}
            if (x=="Gratulation! Zahl erraten!") 
            {...}
            else {...}


    bzw.:

    Code
    if (x=="Gesuchte Zahl ist kleiner.") {...}
            else if (x=="Gesuchte Zahl ist größer.") {...}
                   else if (x=="Gratulation! Zahl erraten!") {...}
                          else {...}

    solange man else nicht als kommentar kennzeichnet immer else herauskommt und sobald man es // auskommentiert funktioniert es?

    irgendwer eine idee warum das so ist?

    liebe gruesse, oxypha

    2 Mal editiert, zuletzt von oxypha (3. April 2012 um 18:55) aus folgendem Grund: add []

  • hallo, ich habe zwei fragen vielleicht kann mir ja hier jemand helfen (x

    bei folgendem code:


    Hoioi!

    ich verstehe nicht wieso bei meinem einfachen code hier das letzte return nötig ist und wieso

    Puh.. der Code.. ok..
    Du hast ne Methode, die nen String zurück gibt. Als erstes in der Methode hast du eine while-Schleife. In die kommst du rein.. oder auch nicht (wenn die Bedingung von Anfang an falsch ist. Kommst du nicht rein, hast du nirgendwo ein return stehen. Deshalb brauchst du nach dem while das return (für den Fall, dass du ins while gar nicht rein kommst.). Interessanter wäre, wozu du das while brauchst. Das ist aus meiner Sicht absolut unnötig.

    Code
    else if (zuErraten.gleich(input)) {return "Gratulation! Zahl erraten!";}


    einfach übergangen wird?


    Liegt an der while-Schleife. Du betrittst die Methode mit zwei gleichen Zahlen als Parametern. Ins while kommst du aber nur, wenn diese beiden Zahlen nicht gleich sind --> ganze while-Schleife wird übersprungen, du kommst direkt zum return unten. Wie gesagt, die while-Schleife ist nutzlos..


    genau wie später hier:

    Code
    if (x=="Gesuchte Zahl ist kleiner.") {...}
            if (x=="Gesuchte Zahl ist größer.") {...}
            if (x=="Gratulation! Zahl erraten!") 
            {...}
            else {...}


    bzw.:

    Code
    if (x=="Gesuchte Zahl ist kleiner.") {...}
            else if (x=="Gesuchte Zahl ist größer.") {...}
                   else if (x=="Gratulation! Zahl erraten!") {...}
                          else {...}

    solange man else nicht als kommentar kennzeichnet immer else herauskommt und sobald man es // auskommentiert funktioniert es?

    irgendwer eine idee warum das so ist?


    Hier stand Schwachsinn.. ein gedanklicher Mix aus dem neuen Switch und equals()
    Generell sollte man Strings in Java nur mit .equals() vergleichen.

    Allerdings.. was immer das wird (ein grafisches Zahlenratespiel?).. der Code ist ziemlich grauenhaft. Wenn du später mit == Abfragen (was du mit equals() machen solltest, s.o.) musst, welche Usernachricht du zurückgegeben hast, um irgendetwas zu tun, schreit das geradezu nach Refactoring (Struktur deines Programms verbessern). Könntest beispielsweise ein Enum statt nem String zurückgeben, das ne toString() Methode hat. Enums kannst du sauber vergleichen, und den Text im Enum jederzeit nach belieben verändern, ohne dass es irgendwelche Auswirkungen hat.


    liebe gruesse, oxypha

    Liebe Grüße,
    emptyvi

  • Puh.. der Code.. ok..


    jah ich hab mir gedacht ich nehm die abkuerzung und mach aus meinem code fuers cli einen fuer n applet -- die while schleife war wohl ein relikt daraus =/ wie dumm..


    Du hast ne Methode, die nen String zurück gibt. Als erstes in der Methode hast du eine while-Schleife. In die kommst du rein.. oder auch nicht (wenn die Bedingung von Anfang an falsch ist. Kommst du nicht rein, hast du nirgendwo ein return stehen. Deshalb brauchst du nach dem while das return (für den Fall, dass du ins while gar nicht rein kommst.). Interessanter wäre, wozu du das while brauchst. Das ist aus meiner Sicht absolut unnötig.


    =O danke -- wieso bin ich da nicht selbst drauf gekommen - ach wenn man nach zwei jahren wieder anfaengt und so einen schwachsinn fabriziert ist das peinlich.. (x


    Liegt an der while-Schleife. Du betrittst die Methode mit zwei gleichen Zahlen als Parametern. Ins while kommst du aber nur, wenn diese beiden Zahlen nicht gleich sind --> ganze while-Schleife wird übersprungen, du kommst direkt zum return unten. Wie gesagt, die while-Schleife ist nutzlos..


    danke..


    Verwendest du Java 7 oder 6? Java 6 konnte Stringvergleiche mit == noch nicht. Ansonsten fällt mir spontan nichts ein.


    6 -- hab einen mac und noch nicht herausgefunden wie ich java darauf update - da apple ja immer seinen eigenen kram drehen muss, was normal echt praktisch ist weil so ein richtig gutes OS rausgekommen ist aber manchmal eben echt nervig -- sollte dualboot mit ubuntu machen (x


    Allerdings.. was immer das wird (ein grafisches Zahlenratespiel?).. der Code ist ziemlich grauenhaft. Wenn du später mit == Abfragen musst, welche Usernachricht du zurückgegeben hast, um irgendetwas zu tun, schreit das geradezu nach Refactoring (Struktur deines Programms verbessern). Könntest beispielsweise ein Enum statt nem String zurückgeben, das ne toString() Methode hat. Enums kannst du sauber vergleichen, und den Text im Enum jederzeit nach belieben verändern, ohne dass es irgendwelche Auswirkungen hat.


    ja ein grafisches zahlenratespiel fuer eine freundin -- hab grad ein techn.-infostudium auf mitbelegung angefangen und bin dort eher mit programmen fuers cli beschaeftigt -- war also durch das graphische interface ein wenig abgelenkt -- danke - wenn meine fehler auch recht peinlich waren (x ja sollte das ganze auf alle faelle nochmal umschreiben -- betreffl. enum -- ja gute idee werd ich machen =)


    Liebe Grüße,
    emptyvi


    danke nochmal -- liebe gruesse,
    oxypha

  • Verwendest du Java 7 oder 6? Java 6 konnte Stringvergleiche mit == noch nicht. Ansonsten fällt mir spontan nichts ein.

    Was verzapfst denn du da bitte? Schau dir mal an, wie String Interning funktioniert, und was der Unterschied zwischen dem Identitätsvergleich mit == und dem inhaltlichen Vergleich mit equals() ist.

    Strings immer mit equals vergleichen.

    Und allgemein ist der Wechsel des JDK von 6 auf 7 mit mehr Problemen als Lösungen verbunden. Java 6 32 Bit und man erspart sich eine Menge von Problemen .. aber das is ein anderes Thema.

  • Was verzapfst denn du da bitte? Schau dir mal an, wie String Interning funktioniert, und was der Unterschied zwischen dem Identitätsvergleich mit == und dem inhaltlichen Vergleich mit equals() ist.

    Strings immer mit equals vergleichen.

    Ich denke er wollte eigentlich darauf hinaus das es in Java 7 möglich ist Strings mit switch zu vergleichen.

    Thomas

  • Was verzapfst denn du da bitte?


    Ich begrüße dich auch mit Wohlwollen, mein herzallerliebster JohnFoo! Auch dir ein freundliches Hallo! ;)

    Aber ich gebe zu.. ich war wohl vorhin nicht ganz da. Was anwesender sagt, ist richtig.. Ich hatte an Switch mit Strings gedacht.. warum auch immer..


    Schau dir mal an, wie String Interning funktioniert, und was der Unterschied zwischen dem Identitätsvergleich mit == und dem inhaltlichen Vergleich mit equals() ist.


    Ist mir bekannt, aber danke :).


    Strings immer mit equals vergleichen.


    Dem ist nichts hinzuzufügen.


    Und allgemein ist der Wechsel des JDK von 6 auf 7 mit mehr Problemen als Lösungen verbunden. Java 6 32 Bit und man erspart sich eine Menge von Problemen .. aber das is ein anderes Thema.


    Ich weiß nicht genau, auf was du hinaus willst, aber ja.. ist ein anderes Thema. ^^


    Meine herzlichsten Abschiedsgrüße entbahrend,
    emptyvi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!