2016-05-04 26 views
0

これは重複している可能性がありますが、このエラーが表示されることはありません。ArrayListの削除メソッドが機能していませんか?

私はArrayListから整数を削除するためにremove()メソッドを使用しようとしていますが、それは私にjava.lang.UnsupportedOperationExceptionを与えています。 removeメソッドは、私の理解のためにintまたはInteger、またはArrayListの値をとる必要がありますが、これらは動作しておらず、同じエラーが発生します。

また、indexとして「深さ」を使用しようとしました。これは、削除するindexです。

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

コードを書式設定してください。これは完全に判読不能です。 –

+0

Arrays.asList()はArrayListを返しません。 Arrays.asList()によって返されたリスト実装を変更できるかどうかを知りたい。シンプルなforループを使用して反復すること、強化forループを使用して反復すること、およびListのイテレータを使用して反復することの違いを参照してください。また、IteratorやEnhanced for Loopを使用して反復処理をしているときやそうでないときにListを変更できるときも参照してください。あなたがこれらを勉強すると、あなたのコードでやっていることすべてと、あなたが得ている例外も明らかになります。あなたのケースでは反復処理が例外の理由ではないのですが、まだ 'Array'から' ArrayList'を作成する方法については、 –

+0

の投稿を参考にしてください(http://stackoverflow.com/a/158269/5394855)。 –

答えて

8

Arrays.asListによって返さList実装はjava.util.ArrayListではありません。

は、ここに私のコードです。これは、固定サイズのListであるArraysクラス内で定義された別の実装です。したがって、それに/から要素を追加/削除することはできません。List

あなたのListの要素によって初期化された新しいjava.util.ArrayListを作成することで、この問題を克服することができます

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

拡張forループを使用してitemsを反復処理が動作しないことをループ内からitems.removeを呼び出して、言いました(それはCuncurrentModificationExceptionを投げる)。代わりに伝統的なforループを使用することができます(Iteratorが指している現在の要素を削除する場合は、Iteratorを明示的に使用します)。

+0

ありがとう、それは今素晴らしいです:) –

関連する問題