2017-09-11 4 views
0

Ich habe versucht, diese Methoden seit ein paar Tagen zu tun. Der Punkt ist, ich habe zwei Methoden, eine, die den vorhergehenden Wert entfernt und eine, die den nachfolgenden Wert entfernt.So entfernen Sie alle vorherigen und nachfolgenden Werte einer Instanz eines Objekts in einem ListIterator

In jedem bin ich einen Parameter vom Typ ListIterator und einen anderen vom Typ Object gegeben. Die Instanz eines Werts, nach dem ich suche, ist das Objekt im ListIterator.

Wenn beispielsweise den vorangehenden Wert zu entfernen, ich eine Liste gegeben, wie:

[12, 42, 28, 92, 3, 25, 3, 89] 

Ich sollte, das Element entfernen, bevor jedes Auftreten der Zahl 3, so dass es wird:

[12, 42, 28, 3, 3, 89] 

Wenn der nachfolgende Wert zu entfernen, habe ich eine Liste gegeben bin wie:

[12, 42, 28, 92, 3, 25, 3, 89] 

Ich sollte das Element nach jedem Auftreten der Nummer 3 so entfernen, dass es wird:

[12, 42, 28, 92, 3, 3] 

habe ich versucht, dies bereits zu tun, aber ohne Erfolg. Dies ist meine aktuellen Code:

entfernen vorhergehenden:

public static void removePreceeding(ListIterator it, Object value) { 
    if (it.hasNext()) { 
     it.next(); 
    } else { 
     return; 
    } 
    while (it.hasNext()) { 
     if (it.next().equals(value)) { 
      it.previous(); 
      it.remove(); 

     } 
    } 
} 

entfernen Erfolg:

public static void removeSucceeding(ListIterator it, Object value) { 
    while (it.hasNext()) { 
     if (it.next().equals(value)) { 
      if (it.hasNext()) { 
       it.next(); 
       it.remove(); 
      } 
     } 
    } 
} 

Alle Hilfe ist willkommen. Danke.

+1

Wenn Sie Ihre Eingabe und die Ausgabe untersucht, würde es einen großen Hinweis auf das, was falsch ist. Wenn Sie die Werte von it.next() und it.previous() Werten zuweisen und sie (oder in Ihrem Debugger) ausgeben, würde das auch sehr hilfreich sein. –

Antwort

0

Versuchen Sie die folgenden:

private static void removePreceeding(ListIterator listIterator, Object value) { 
     while (listIterator.hasNext()) { 
      if (listIterator.next().equals(value)) { 
       if (listIterator.hasPrevious()) { 
        listIterator.previous();// Note that alternating calls to 
              // next and previous will return the 
              // same element repeatedly. Hence 
              // call another previous to move the 
              // cursor one level backward 
        listIterator.previous(); 
        listIterator.remove(); 
        listIterator.next(); // Since the cursor was moved back, 
              // reset it to next element (i.e 
              // current element which was visited 
              // previously) 
       } 
      } 
     } 
    } 

private static void removeSucceeding(ListIterator listIterator, Object value) { 
     while (listIterator.hasNext()) { 
      if (listIterator.next().equals(value)) { 
       if (listIterator.hasNext()) { 
        listIterator.next(); 
        listIterator.remove(); 
       } 
      } 
     } 
    } 
Verwandte Themen