Was für einen Fehler hat diese Schleife?



  • Hi,

    mit folgender Schleife will ich alle Zeilen einer jTable löschen:

    for (int i = 0; i < t_kw.getRowCount(); i++)
               t_akl.removeRow(0);
    

    Das Problem ist, dass immer eine Zeile übrig bleibt. Ich bin schon völlig verzweifelt. Könnt Ihr mir sagen, wo mein Fehler liegt?



  • Kann es sein, dass getRowCount() sich verringert während i größer wird? Lass entweder mal das i++ weg oder hol dir getRowCount() vor der Schleife in eine Variable. Was spricht eigentlich gegen removeAll? Gibt es auch soweit ich weiß.



  • Wenn's immer genau eine zuviel ist ... naja mein Gott, dann mach's halt so:

    for (int i = 0; i < t_kw.getRowCount() + 1; i++)
    {
         t_akl.removeRow(0);
    }
    

    Ist zwar merkwürdig das es nicht geht, aber wenn es so geht und zu keinen
    Fehler kommt (solange du die Software noch testen kannst vor der "Auslieferung")...



  • removeAll ist doch eher die geerbte Container Methode, oder?

    Bist du sicher, dass t_kw und t_akw das gleiche Objekt refernzieren?

    Alternativvorschlag zur for-Schleife:

    while (t_kakl.getRowCount() > 0) 
    { 
         t_akl.removeRow(0); 
    }
    

    /Dirk



  • Ich würde auch denken, das es dir for() Schleife ist! Versuche es wirklich mla mit while(). Hatte mal das selbe Problem in Delphi 😃



  • Hi Leute,

    Ihr hattet recht. Es lag an der For-Schleife. Ihr habt natürlich recht, wenn Ihr meint, dass sich getRowCount nach jedem durchlauf verringert. Mit while geht es jetzt.
    Oh mann, hätte ich eigentlich auch selbst drauf kommen müssen.
    Naja, war halt schon spät gestern abend 😉

    Danke nochmal an Euch.



  • wie wäre es mit:

    for(int i = 0; i <= bla.getRowCount(); i++)
    {
    ...
    }
    


  • Auch wenn das bei dir jetzt klappt, solltest du dir angewöhnen
    Elemente von Vektoren o. Ä. mit einer rückwärts zählenden Schleife
    zu löschen.

    Jockel


Anmelden zum Antworten