Avatar billede aslan Nybegynder
02. maj 2002 - 22:36 Der er 11 kommentarer og
1 løsning

Får en exception når jeg sletter en objekt fra linkedlist?

Jeg får en ConcurrentModificationException når if sætningen passer og dertil objekt bliver slettet?

    void resultat()
    {
        Iterator gennemløb = persons.iterator();

        while(gennemløb.hasNext())
        {
            Person p = (Person) gennemløb.next();

            p.weight += beregnWeight();

            p.waist += beregnWeist();

            p.weightKontrol += beregnWeight();
            p.waistKontrol += beregnWeist();

            d.println("Name : "+p.name+"  Weight :"+Stream.format(p.weight,0,2)+"  Waist : "+p.waist);

            if(p.weightKontrol > forventetTab() && p.waistKontrol > forventetTab())
            {
                persons.remove(p);

                d.println("CONGRATULATIONS "+p.name+" U succeded");

            }
        }

    }
Avatar billede erikjacobsen Ekspert
02. maj 2002 - 22:41 #1
Det skal en iterator sige, når der bliver ændret (slettet) i den liste, den
er i gang med at løbe igennem. Det er så blot op til dig at bestemme hvad der skal
ske. Er det nu det eneste element du skal slette, er du velkommen til at fange og
ignorer den exception.
Avatar billede aslan Nybegynder
02. maj 2002 - 22:43 #2
hva hedder den exception man fanger? Det samme som den fejl den giver?
Avatar billede disky Nybegynder
02. maj 2002 - 22:43 #3
aslan:
Et god sted at kigge er altid API'en til Java, der står en masse god information om sådanne ting.
Avatar billede disky Nybegynder
02. maj 2002 - 22:44 #4
sæt
try
{


            if(p.weightKontrol > forventetTab() && p.waistKontrol > forventetTab())
            {
                persons.remove(p);

                d.println("CONGRATULATIONS "+p.name+" U succeded");

            }

}
catch (ConcurrentModificationException e)
{
}

ind istedet for din 'if' sætning.
Avatar billede erikjacobsen Ekspert
02. maj 2002 - 22:45 #5
du kan bare fange den med det navn du har fået. Du skal i hvert fald ikke
bare fange enhver exception
Avatar billede aslan Nybegynder
02. maj 2002 - 22:48 #6
Det hjælper ikke når jeg prøver dette:

    void resultat()
    {
        Iterator gennemløb = persons.iterator();

        while(gennemløb.hasNext())
        {
            Person p = (Person) gennemløb.next();

            p.weight += beregnWeight();

            p.waist += beregnWeist();

            p.weightKontrol += beregnWeight();
            p.waistKontrol += beregnWeist();

            d.println("Name : "+p.name+"  Weight :"+Stream.format(p.weight,0,2)+"  Waist : "+p.waist);
        try{


            if(p.weightKontrol > forventetTab() && p.waistKontrol > forventetTab())
            {
                persons.remove(p);

                d.println("CONGRATULATIONS "+p.name+" U succeded");

            }
          }
          catch (ConcurrentModificationException e){}
        }

    }
Avatar billede erikjacobsen Ekspert
02. maj 2002 - 22:50 #7
Jeg menr du skal havr try omkring din hasNext()
Avatar billede aslan Nybegynder
02. maj 2002 - 22:53 #8
Så giver det fejl, når jeg forsøger at compile det?

    void resultat()
    {
        Iterator gennemløb = persons.iterator();
try{

        while(gennemløb.hasNext())
        {
            Person p = (Person) gennemløb.next();

            p.weight += beregnWeight();

            p.waist += beregnWeist();

            p.weightKontrol += beregnWeight();
            p.waistKontrol += beregnWeist();

            d.println("Name : "+p.name+"  Weight :"+Stream.format(p.weight,0,2)+"  Waist : "+p.waist);



            if(p.weightKontrol > forventetTab() && p.waistKontrol > forventetTab())
            {
                persons.remove(p);

                d.println("CONGRATULATIONS "+p.name+" U succeded");

            }

    }
          catch (ConcurrentModificationException e){}
        }

    }
Avatar billede erikjacobsen Ekspert
02. maj 2002 - 22:56 #9
}
}
          catch (ConcurrentModificationException e){}
   
    }
Avatar billede aslan Nybegynder
02. maj 2002 - 22:57 #10
hehe ja.. der var jeg vist for hurtig med at spørge. Ehm hvem skal have point?
Avatar billede aslan Nybegynder
02. maj 2002 - 23:08 #11
oh well
Avatar billede carstenknudsen Nybegynder
03. maj 2002 - 10:43 #12
aslan: du kan slette via iteratoren så
får du ikke den exception. iterators remove
metode kan for de fleste klasser (mener jeg)
godt finde ud af at fjerne et element uden
problemer midt i iterationen. Problemet
er at du sletter fra persons direkte og
det er ikke godt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester