Announcement

Collapse
No announcement yet.

if else problematik

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [JAVA] 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, 18:55. Reason: add []

  • #2
    Originally posted by oxypha View Post
    hallo, ich habe zwei fragen vielleicht kann mir ja hier jemand helfen (x

    bei folgendem code:
    Hoioi!

    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.

    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..

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

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

    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015

    Comment


    • #3
      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..

      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
      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..
      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
      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 =)

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

      Comment


      • #4
        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.

        Comment


        • #5
          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

          Comment


          • #6
            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..

            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 .

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

            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, 01:01.

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

            PP-Tutor WS2011 - WS2014
            EVC-Tutor SS2015

            Comment

            Working...
            X