logik fehler,ich komm nich drauf...



  • 1. ok,mach ich sonst auch nich so,werd ich gleich mal aendern
    2. naja is doch ok so,aber werd ich auch aendern 😉

    hier mal meine Ausgabe routine,vlt is da auch der Fehler?

    durchlauf = 0;
       for(Iterator iter = relation.iterator();iter.hasNext();boolfeld = (boolean[])iter.next()){
        for(int i=0;i<boolfeld.length;i++){
         System.out.println((durchlauf+1)+ " "+ boolfeld[i]);
        }
       durchlauf++;
       }
    


  • ich bin jetzt mal auf die Idee gekommen das ganze durchn Debugger zu jagen und siehe da,der sagt mir nachm 2.for-Durchlauf nach

    relation.add(boolfeld);
        durchlauf++;
    

    das das erste Element false ist bzw gar keinen Wert hat.Wenn ich noch ein paar durchgaenge laufen lassen ergibt sich das die vorderen Elemente vollkommen durchn Wind sind.

    Kann das daran liegen das immer boolfeld genutzt wird?Also ich werd mal eben probieren wenn ich boolfeld2,boolfeld3 usw. noch mit rein bringe,was dann passiert.



  • meissner schrieb:

    Kann das daran liegen das immer boolfeld genutzt wird?

    Ja. Aber du brauchst nicht extra boolfeld2 bis unendlich anlegen, es reicht, wenn du boolfeld nach jedem relation.add ein neues Array zuweist. BTW deine Quelltext-Formatierung ist echt eklig, daran solltest du arbeiten. Schreibst du mit Notpad oder so?



  • wie meinst du das mit neuen Array zuweisen?

    Das mit der Formatierung kommt davon,wenn man immer hin und her kopiert,da mal was loescht und einfuegt...und...und...und



  • Bashar schrieb:

    Schreibst du mit Notpad oder so?

    only wimps use IDEs, true programmers use a hardcore, 'suck it down' editor as notepad 😃

    EDIT:
    //Neues Array zuweisen
    boolfeld[] = new boolean[zeilen];



  • ok,jetzt geht es.

    bleibt nur noch zu klaeren,warum dies so ist und was mich noch interessiert ist das in c++ auch der Fall?



  • meissner schrieb:

    wie meinst du das mit neuen Array zuweisen?

    boolfeld = new boolean[zeilen];

    Sonst fügst du immer wieder das gleiche Array ein. Denk dran, dass Arrays Referenztypen sind.

    Das mit der Formatierung kommt davon,wenn man immer hin und her kopiert,da mal was loescht und einfuegt...und...und...und

    Jaja. Das gehört aber dazu, dass man seinen Quelltext sauber hält. Zumindest so, dass die Einrückung mit der Struktur übereinstimmt. Übrigens, dein Code hat eine schließende geschweifte Klammer mehr als öffnende.



  • meissner schrieb:

    bleibt nur noch zu klaeren,warum dies so ist

    Hab ich schon geschrieben (kein Vorwurf, hab ich ja grad erst gepostet)

    und was mich noch interessiert ist das in c++ auch der Fall?

    In C++ kann man keine Arrays in Container packen. Das würde man vielleicht mit Zeigern lösen, in dem Fall erübrigt sich die weitere Diskussion hoffentlich 🙂



  • Das doch mal korrekte Ansage.Danke!

    Jetzt ist mir aber nochwas aufgefallen,es gibt einen unterschied zwischen:

    durchlauf = 0;
       for(Iterator iter = relation.iterator();iter.hasNext();boolfeld = (boolean[])iter.next()){
    
        for(int i=0;i<boolfeld.length;i++){
         System.out.println((durchlauf+1)+ " "+ boolfeld[i]);
        }
       durchlauf++;
       }
    

    und:

    durchlauf = 0;
       for(Iterator iter = relation.iterator();iter.hasNext();){
        boolfeld = (boolean[])iter.next();
    
        for(int i=0;i<boolfeld.length;i++){
         System.out.println((durchlauf+1)+ " "+ boolfeld[i]);
        }
       durchlauf++;
       }
    

    Ich verstehe aber nicht warum,beim ersten wird das erste boolfeld Element nur mit false ausgegeben und das zweite Element hat die Werte die das erste Element haben sollte,das zieht sich dann weiter bis zm letzten,wobei das letzte wieder stimmt,es wurde nur das vorletzte Element ausgelassen.Beim zweiten ist alles so wie es sein soll.Sehr merkwuerdig.

    Dann wuerde mich noch interessieren,wie man bei Java 2 Initialisierungsvariablen in eine for Schleife bekommt (wie in C/C++),denn das hier geht nicht:

    for(Iterator iter = relation.iterator(), int durchlauf = 0;iter.hasNext();iter.hasNext();boolfeld = (boolean[])iter.next())
    

    Also ich bin der Meinung das es in C/C++ geht,aber nicht ganz sicher...



  • Zu der for Schleife, das müsste in java so gehen, in C++ übrigens genauso:

    for (int i=0,int j=10;i<10,j>0;++i,--j) {
      System.out.println("i: "+i+", j: "+j);
    }
    

    Das erstere Problem liegt wohl daran dass du bereits im Kopf der for-Schleife mit next() einen Wert zuweist, und beim anderen mal eben nicht. Aber ich geb dir keine Garantie drauf.


Anmelden zum Antworten