Java Problem mit ner If- Schleife

    • AVIRA266
      AVIRA266
      Bronze
      Dabei seit: 22.07.2008 Beiträge: 11.784
      Hallo,
      hab grad voll das Problem. Ich füge erst mal den wichtigen Teil des Quellcodes ein.

      [quote]public String berechne(String z)
      {
      String [] Klassenarray=new String[] {"1", "2", "3","4","5","6","7","8","9"};
      String [] AnzSch=new String[] {"9", "8", "7","6","5","4","3","2","1"};
      int k=0;
      //System.out.println(z + " test"); (Probe ob der wert z stimmt)
      for (int i=0;i<9;i++)
      {
      if(Klassenarray[i]==z)
      {
      k=i;
      break;
      }
      }
      System.out.println(k);
      return AnzSch[k];
      }
      [/quote]Wenn ich hier etwas eingebe, ist das der Wert z, Hab ihn probehalber mal ausgegeben und es stimmt auch. Jedoch geht er nie in die If-Schleife hinein, obwohl ich z.b. 3 eingebe, er gibt immer 9 aus. Weiß jemand was da falsch läuft.

      mfg
  • 12 Antworten
    • almboa
      almboa
      Bronze
      Dabei seit: 12.12.2006 Beiträge: 668
      ich versteh nicht so ganz was hier passieren soll!

      paar anmerkungen:
      string-vergleich nicht mit == sondern mit s1.equals(s2)
      benützt du nur zahlen? warum dann gekünstelt in nem string-array speichern?
      sind das fixe zuordnugen? 1=>9? dann nimm ne map und nicht so umständliche arrays!
    • Ronny1993
      Ronny1993
      Bronze
      Dabei seit: 14.02.2010 Beiträge: 6.780
      Ablaufprotokoll:


      Eingabe z=3

      for-Schleife läuft bis i=2, weil Klassenarray[2]==3==z

      k=2
      ---------------------------------------------

      System.out.println(2)
      returnWert =5


      Ist das jetzt falsch? Was soll der Code machen?

      Paar andre Sachen:

      -Ich würde dir mal empfehlen, deinen Code zu kommentieren
      -Wieso machst du die Zahlenvergleicherei mit Strings?!?
      -Stringvergleiche mit s1.equals(s2) durchführen, solange du keinen Plan von Referenztypen hast


      Der Fehler hier muss woanders liegen, erklär mal bisschen was das Programm macht und poste andre kommentierte Codeteile, dann kann ich weiterhelfen

      K
    • AVIRA266
      AVIRA266
      Bronze
      Dabei seit: 22.07.2008 Beiträge: 11.784
      ähmm normalerweise sind es Texte, WWörter, habe sie nur umgeändert, da ich es nicht funktioniert hat und so ist es halt einfacher zum testen.
      werd das:s1.equals(s2) mal testen
    • AVIRA266
      AVIRA266
      Bronze
      Dabei seit: 22.07.2008 Beiträge: 11.784
      ja 1000 danke...
      ers geht mit

      s1.equals(s2)

      man einfach zu lang her...
    • Ronny1993
      Ronny1993
      Bronze
      Dabei seit: 14.02.2010 Beiträge: 6.780
      Das Problem ist, dass du mit string1==string2 nur die Zeiger auf die Stringobjekte vergleichst und jenachdem, wie das Objekt angelegt wurde kann es sein, dass "Hund"=="Hund" eben falsch ist, weil verschiedene Zeiger auf beide Objekte zeigen. Obwohl der Inhalt gleich ist. Beliebter Anfängerfehler, der auch extrem schwer zu finden ist, wenn mans nicht weiß.

      Aber gewöhn dir trotzdem nen besseren Stil an :D

      K
    • almboa
      almboa
      Bronze
      Dabei seit: 12.12.2006 Beiträge: 668
      schau dir trotzdem mal die map an. für deinen anwendungsfall sind arrays komplett unsinnig!
    • AVIRA266
      AVIRA266
      Bronze
      Dabei seit: 22.07.2008 Beiträge: 11.784
      Original von almboa
      schau dir trotzdem mal die map an. für deinen anwendungsfall sind arrays komplett unsinnig!
      der Wirkliche Array sieht so aus:
      String [] KlassenLehrer=new String[] {"Herr E1", "Herr E2", "Frau E3","Herr Fischer","Herr Mayer","Herr Weinreich","Herr Q2a","Herr Q2b","Herr Q2c","Falsche Eingabe"};

      String [] AnzSch=new String[] {"TGE1 anz", "TGE2 anz", "TGE3 anz","TGQ1a anz","TGQ1b anz","TGQ1c anz ","TGQ2a anz","TGQ2b anz","TGQ2c anz", "Falsche Eingabe"};
    • AVIRA266
      AVIRA266
      Bronze
      Dabei seit: 22.07.2008 Beiträge: 11.784
      Hey hab mal noch eine Frage:
      Was bewirkt this. und super?
      Super ruft doch irgenwie den konstruktor von der zu erbenden klasse auf.
    • Sid86
      Sid86
      Bronze
      Dabei seit: 26.10.2007 Beiträge: 409
      genau, mit super rufst du den konstruktor der oberklasse auf.
      und this bezeichnet das aktuelle objekt auf dem du arbeitest
    • almboa
      almboa
      Bronze
      Dabei seit: 12.12.2006 Beiträge: 668
      code:
      Map<String, String> m
      
      // map füllen
      m.put("Herr E1", "TGE1 anz");
      ...
      
      berechne(String z)
      {
         return m.get(z);
      }
    • sarc
      sarc
      Moderator
      Moderator
      Dabei seit: 06.06.2008 Beiträge: 12.193
      Original von Ronny1993
      Das Problem ist, dass du mit string1==string2 nur die Zeiger auf die Stringobjekte vergleichst und jenachdem, wie das Objekt angelegt wurde kann es sein, dass "Hund"=="Hund" eben falsch ist, weil verschiedene Zeiger auf beide Objekte zeigen. Obwohl der Inhalt gleich ist. Beliebter Anfängerfehler, der auch extrem schwer zu finden ist, wenn mans nicht weiß.

      Aber gewöhn dir trotzdem nen besseren Stil an :D

      K
      Damit lernt man aber sehr schön, wie der Java Compiler arbeitet...

      "Hund" == "Hund" -> true

      String h = "Hund"
      h == "Hund" -> true

      String h = "Hu"
      h + "nd" = "Hund" -> false

      Herrlicher Hirnfick. :)
    • WuaghhhhXMA
      WuaghhhhXMA
      Bronze
      Dabei seit: 02.09.2008 Beiträge: 1.284
      "If-Schleife" :facepalm:
      Hoffentlich nur nen lvl :/