Results 1 to 6 of 6

Thread: if else problematik

  1. #1
    Veteran
    Join Date
    Mar 2012
    Posts
    2
    Thanks
    2
    Thanked 0 Times in 0 Posts

    Question if else problematik

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

    bei folgendem code:

    Code:
        public class ZRF extends ZRFrame {        public static String zahlenraten (int input, UnbekannteZahl zuErraten) {                    
                                while(zuErraten.gleich(input)==false){
                                    if (input == 666) {
                                    return ""+zuErraten;
                                    }
                                    else if (input < 0 || input > 99) {
                                    //System.out.println("Nur Zahlen von 0 bis 99!");
                                    return "Nur Zahlen von 0 bis 99!";
                                    }
                                    else if (zuErraten.gleich(input)) {
                                    //System.out.println("Gratulation! Zahl erraten!");
                                    return "Gratulation! Zahl erraten!";
                                    }
                                    else if (zuErraten.kleiner(input)) {
                                    //System.out.println("Gesuchte Zahl ist kleiner.");
                                    return "Gesuchte Zahl ist kleiner.";
                                    }
                                    else {
                                    //System.out.println("Gesuchte Zahl ist größer.");
                                    return "Gesuchte Zahl ist größer.";
                                    }
                                }
                        return "Gratulation! Zahl erraten!";
            }
        }
    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
    Last edited by oxypha; 03-04-2012 at 18:55. Reason: add []

  2. #2
    Logo-Wettbewerb 2012, Platz 2. emptyvi's Avatar
    Join Date
    Mar 2008
    Location
    Ponyville
    Posts
    815
    Thanks
    311
    Thanked 435 Times in 236 Posts
    Quote Originally Posted by oxypha View Post
    hallo, ich habe zwei fragen vielleicht kann mir ja hier jemand helfen (x

    bei folgendem code:
    Hoioi!

    Quote Originally Posted by oxypha View Post
    Code:
        public class ZRF extends ZRFrame {        public static String zahlenraten (int input, UnbekannteZahl zuErraten) {                    
                                while(zuErraten.gleich(input)==false){
                                    if (input == 666) {
                                    return ""+zuErraten;
                                    }
                                    else if (input < 0 || input > 99) {
                                    //System.out.println("Nur Zahlen von 0 bis 99!");
                                    return "Nur Zahlen von 0 bis 99!";
                                    }
                                    else if (zuErraten.gleich(input)) {
                                    //System.out.println("Gratulation! Zahl erraten!");
                                    return "Gratulation! Zahl erraten!";
                                    }
                                    else if (zuErraten.kleiner(input)) {
                                    //System.out.println("Gesuchte Zahl ist kleiner.");
                                    return "Gesuchte Zahl ist kleiner.";
                                    }
                                    else {
                                    //System.out.println("Gesuchte Zahl ist größer.");
                                    return "Gesuchte Zahl ist größer.";
                                    }
                                }
                        return "Gratulation! Zahl erraten!";
            }
        }
    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.

    Quote Originally Posted by oxypha View Post
    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..

    Quote Originally Posted by oxypha View Post
    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.
    Quote Originally Posted by oxypha View Post
    liebe gruesse, oxypha
    Liebe Grüße,
    emptyvi
    Last edited by emptyvi; 04-04-2012 at 01:03. Reason: Fehler ausgebessert - Danke an JohnFoo

    ¤¸¸.´¯`¸¸...>> Join the herd, join "My Little Pony @ TU-Wien" <<...¸¸´¯`.¸¸¤
    ¤¸¸.´¯`¸¸...>> (100% Twilight Sparkle approved) <<...¸¸´¯`.¸¸¤

  3. The Following User Says Thank You to emptyvi For This Useful Post:


  4. #3
    Veteran
    Join Date
    Mar 2012
    Posts
    2
    Thanks
    2
    Thanked 0 Times in 0 Posts
    Quote Originally Posted by emptyvi View Post
    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..

    Quote Originally Posted by emptyvi View Post
    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
    Quote Originally Posted by emptyvi View Post
    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..
    Quote Originally Posted by emptyvi View Post
    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
    Quote Originally Posted by emptyvi View Post
    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 =)

    Quote Originally Posted by emptyvi View Post
    Liebe Grüße,
    emptyvi
    danke nochmal -- liebe gruesse,
    oxypha

  5. #4
    Dipl.Ing JohnFoo's Avatar
    Join Date
    Nov 2003
    Posts
    1,169
    Thanks
    70
    Thanked 105 Times in 50 Posts
    Quote Originally Posted by emptyvi View Post
    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.
    Biete Java Nachhilfe (Verteilte Systeme, Programmierpraxis, ...).

  6. The Following User Says Thank You to JohnFoo For This Useful Post:


  7. #5
    Dipl.Ing
    Join Date
    Apr 2009
    Location
    Meidling
    Posts
    1,179
    Thanks
    34
    Thanked 151 Times in 120 Posts
    Quote Originally Posted by JohnFoo View Post
    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
    Mathematiger

  8. #6
    Logo-Wettbewerb 2012, Platz 2. emptyvi's Avatar
    Join Date
    Mar 2008
    Location
    Ponyville
    Posts
    815
    Thanks
    311
    Thanked 435 Times in 236 Posts
    Quote Originally Posted by JohnFoo View Post
    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..

    Quote Originally Posted by JohnFoo View Post
    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 .

    Quote Originally Posted by JohnFoo View Post
    Strings immer mit equals vergleichen.
    Dem ist nichts hinzuzufügen.

    Quote Originally Posted by JohnFoo View Post
    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
    Last edited by emptyvi; 04-04-2012 at 01:01.

    ¤¸¸.´¯`¸¸...>> Join the herd, join "My Little Pony @ TU-Wien" <<...¸¸´¯`.¸¸¤
    ¤¸¸.´¯`¸¸...>> (100% Twilight Sparkle approved) <<...¸¸´¯`.¸¸¤

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •