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"); } } }
Annonceindlæg fra Axcess Nordic
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.
hva hedder den exception man fanger? Det samme som den fejl den giver?
aslan: Et god sted at kigge er altid API'en til Java, der står en masse god information om sådanne ting.
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.
du kan bare fange den med det navn du har fået. Du skal i hvert fald ikke bare fange enhver exception
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){} } }
Jeg menr du skal havr try omkring din hasNext()
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){} } }
} } catch (ConcurrentModificationException e){} }
hehe ja.. der var jeg vist for hurtig med at spørge. Ehm hvem skal have point?
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.
Kurser inden for grundlæggende programmering