7 svar
111 visningar
sampledragon5 är nöjd med hjälpen
sampledragon5 495
Postad: 28 okt 2021 15:57

for loop

Hej! Jag undrar varför min samling "items" som består av objekten "Macbook" , "iphone" , "Samsung" samt "Airpods" inte har en storlek på 0 då min kod har kompilerats. När jag kompilerar koden så ser jag via contains metoden att min samling har kvar iphone samt Airpods ( men jag trodde att min for loop skulle leda till att alla mina objekt skulle raderas ).Jag skulle alltså gärna vilja få en förklaring på varför min for lop inte raderar alla objekt i samlingen samt varför just "iphone" samt "Airpods" är kvar i min samling. Tack på förhand !!! min kod är:

import java.util.*;

public class Ar {
public static void main(String[] args) {
ArrayList<String> items = new ArrayList<>();
items.add(new String("Macbook"));
items.add(new String("iphone"));
items.add(new String("Samsung"));
items.add(new String("AirPods"));
 
 
 
for(int i = 0; i < items.size(); i++ ) {
items.remove(i);
}
System.out.println(items.contains("AirPods"));
}
}

Macilaci 2106
Postad: 28 okt 2021 16:11 Redigerad: 28 okt 2021 16:21

I java fungerar det inte att ta bort element från listan du bearbetar. Du borde få ConcurrentModificationException. I dessa fall kan du använda Iterator.

T.ex.

Iterator<String> itr = items.iterator();

        while (itr.hasNext())
        {
            String s = itr.next();

...
            itr.remove();
        }

funkar.

Ursäkta, du itererade inte på listan.

Macilaci 2106
Postad: 28 okt 2021 16:20 Redigerad: 28 okt 2021 16:25

När du gör items.remove(0), raderar du "Macbook".

Sen gör du items.remove(1), som tar bort "Samsung",

Sen items.remove(2), och items.remove(3) händer inte, därför att items.size() == 2.

sampledragon5 495
Postad: 28 okt 2021 16:24

Jag fattar dock inte varför iphone ( dvs objektet i index 1) samt Airpods ( index 3 ) är kvar :( 

Macilaci 2106
Postad: 28 okt 2021 16:26 Redigerad: 28 okt 2021 16:31

Efter första iterationen blir "iphone" element 0 och du "hoppar över" den.

Du tar bort en, du hoppar över en, du tar bort en, du hoppar över en,.....

 

Det här skulle ta bort alla:

for(; 0 < items.size(); ) {
items.remove(0);
}

sampledragon5 495
Postad: 28 okt 2021 16:36

 Denhär koden:

for( int i = 0; i < 4; i++) {
System.out.println(i);
}

 

// Den koden ovan printar 

1

2

3

fattar inte vad som skiljer sig mellan denna koden och den koden jag behöver hjälp med... hur "hoppar jag över" Tack för att du hjälper mig förresten det uppkattas 

Macilaci 2106
Postad: 28 okt 2021 16:41

På början:

items : ["Macbook","iphone","Samsung","AirPods"]

första iterationen: items.remove(0) tar bort "Macbook"

Nu items : ["iphone","Samsung","AirPods"]

andra iterationen: items.remove(1) tar bort "Samsung"

Nu items : ["iphone","AirPods"]

Och for slutar här därför att i==2, och items.size()==2

sampledragon5 495
Postad: 28 okt 2021 16:45

TACK TACK TACK!!!!! 

Svara Avbryt
Close