2016-05-04 14 views
0

Dies kann ein Duplikat sein, aber ich kann keine Fragen mit diesem Fehler sehen, also Entschuldigung, wenn es so ist.ArrayList Remove-Methode funktioniert nicht?

Ich versuche, die remove() Methode zu verwenden, um eine Ganzzahl von meinem ArrayList zu entfernen, aber es gibt mir java.lang.UnsupportedOperationException. Die Methode remove sollte eine int oder Integer zu meinem Verständnis, oder ein Wert aus der ArrayList, aber diese scheinen nicht zu funktionieren und den gleichen Fehler geben.

Ich habe auch versucht mit "Tiefe" als index, wie das ist die index, die ich entfernen möchte.

Hier ist mein Code:

import java.util.*; 

public class EP{ 
public static List<Integer> items = Arrays.asList(12, 13, 48, 42, 38,  2827, 827, 828, 420); 
public static void main(String[]args){ 
System.out.println("Exam List"); 
for(Integer i: items){ 
    System.out.println(i); 
} 
    Scanner scan = new Scanner(System.in); 
System.out.println("Enter depth"); 
int depth = scan.nextInt(); 
System.out.println("Enter value"); 
int value = scan.nextInt(); 
System.out.println(mark(depth, value)); 
} 

public static int mark(int depth, int value){ 
int ret = -1; //This ensures -1 is returned if it cannot find it at the specified place 
for(Integer i: items){ 
    if(items.get(depth) == (Integer)value){ //This assummes depth starts at 0 
    ret = value; 
    items.remove(items.get(depth)); // has UnsupportedOperationException 
    } 
    } 
System.out.println("Updated Exam List"); 
for(Integer j: items){ 
    System.out.println(j); 
} 
return ret; 
} 
} 
+1

Bitte formatieren Sie Ihren Code. Dies ist völlig unleserlich. –

+0

Arrays.asList() gibt ArrayList nicht zurück. Ich möchte, dass Sie herausfinden, ob Sie die von Array.asList() zurückgegebene Listenimplementierung ändern können. Sehen Sie den Unterschied zwischen dem Iterieren mit der einfachen for-Schleife, dem Iterieren mit der erweiterten for-Schleife und dem Iterieren mit dem List-Iterator. Sehen Sie auch, wenn Sie eine Liste ändern können, während Sie mit Iterator oder der erweiterten for-Schleife iterieren, und wenn dies nicht möglich ist. Wenn du diese studierst, wirst du alles, was du in deinem Code tust, und auch die Ausnahmen, die du bekommst, loswerden. In Ihrem Fall ist die Änderung während der Iteration kein Grund für eine Ausnahme, sondern studieren Sie immer noch –

+0

siehe [this] (http://stackoverflow.com/a/158269/5394855) Post über das Erstellen einer 'ArrayList' aus einem' Array'. –

Antwort

8

Die List Implementierung zurück von Arrays.asList ist nicht java.util.ArrayList. Es ist eine andere Implementierung innerhalb der Arrays Klasse definiert, die eine feste Größe List ist. Daher können Sie kein Element hinzufügen/entfernen List.

Sie dieses Problem überwinden, indem eine neue java.util.ArrayList durch die Elemente Ihrer List initialisiert erstellen:

public static List<Integer> items = new ArrayList<>(Arrays.asList(12, 13, 48, 42, 38, 2827, 827, 828, 420)); 

Das heißt, items.remove innerhalb einer Schleife aufrufen, dass iteriert über items Verwendung der for-Schleife verbessert wird nicht funktionieren (es wird CuncurrentModificationException werfen). Sie können stattdessen eine traditionelle for-Schleife verwenden (oder eine explizite Iterator, wenn Sie das aktuelle Element entfernen möchten, auf das die Iterator zeigt, was nicht der Fall zu sein scheint).

+0

Danke, es funktioniert jetzt super :) –