2017-05-24 3 views
1

Ich kann nicht erkennen, wie man richtige Schleife für alle Duplikate löschen, die nacheinander in Array stehen. Zum Beispiel habe ich eine nächste Array-Liste:Entfernen Sie die Duplikate hintereinander im Array

public static void main(String[] args) { 
     ArrayList<Integer> integers = new ArrayList<Integer>(); 
     integers.add(0); 
     integers.add(0); 
     integers.add(0); 
     integers.add(1); 
     integers.add(0); 
     integers.add(0); 
     integers.add(1); 
     integers.add(1); 
     integers.add(1); 
     integers.add(0); 
     integers.add(1); 
     integers.add(0); 
     integers.add(0); 
     integers.add(0); 
     integers.add(0); 
     integers.add(1); 
     integers.add(1); 
     integers.add(0); 
} 

Und das Ergebnis sein sollte:

{0,1,0,1,0,1,0,1,0} 

Ich habe versucht, diese Schleife zu tun:

for(int i = 0; i < integers.size(); i++){ 
      for(int j = i + 1; j < integers.size(); j++){ 
       if (integers.get(i) == integers.get(j)){ 
        integers.remove(integers.get(i)); 
        break; 
       } 
      } 
     } 

aber ich don‘ t möchte jedes "j" durchlaufen, wenn "i" nicht erhöht wurde.

Können Sie uns bitte einen Rat geben?

Antwort

3

Sie können dies mit einer einzigen Schleife tun, indem sie aus der Liste zu lesende Spur des letzten Wertes zu halten:

int last = integers.get(0); 
for(int i = 1; i < integers.size(); i++) { 
    if (integers.get(i).equals(last)) { 
     integers.remove(i); 
     i--; 
    } else { 
     last = integers.get(i); 
    } 
} 

P. S. integers.remove(integers.get(i)); ist sowieso falsch, da es das erste Auftreten von integers.get(i) aus dem List entfernt und Sie das aktuelle Vorkommen entfernen sollten. Daher sollten Sie nach Index und nicht nach Wert entfernen.

+0

Ja, danke! – Andrew

+0

Ja, das war mein Fehler – Andrew

1

Sie einen Iterator verwenden können:

Iterator<Integer> it = integers.iterator(); 
int last = it.next(); 
int current; 

while(it.hasNext()) 
{ 
    current = it.next(); 
    if(current == last) 
    { 
     it.remove(); 
    } 
    else 
    { 
     last = current; 
    } 
} 
2

Sie können es in einer einzigen Schleife

for (int i = 0 ; i < integers.size() - 1 ; ++i) { 
    if (integers[i].equals(integers[i + 1])) { 
     integers.remove(i + 1); 
     --i; 
    } 
} 

Wenn Sie ein Spiel das Duplikat entfernen, und die Iterationsvariable als remove verschiebt die Elemente verringern in der ArrayList links.

Verwandte Themen