2016-11-05 14 views
1
public class Solution { 
    public static void main(String[] args) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     int l1=Integer.parseInt(br.readLine());int count=0; 
     String l2=br.readLine(); 
     String[] a=l2.split(" ");int[] no=new int[l1]; 
     for (int i=0;i<l1;i++) { 
      no[i]=Integer.parseInt(a[i]); 
     } 
     List list=Arrays.asList(no); 
     Set<Integer> set=new LinkedHashSet<Integer>(list); 
     ***for (int integer : set) {*** 
     count=Math.max(count, Collections.frequency(list, integer)); 
     } 
    } 
} 

コードのハイライト部分にjava.lang.ClassCastException: [I cannot be cast to java.lang.Integer at Solution.main(Solution.java:23)があります。これの理由は何ですか?java.lang.ClassCastException:[java.lang.Integerにキャストできません

+0

[配列のArrays.asList()の重複](http://stackoverflow.com/questions/1248763/arrays-aslist-of-an-array) –

答えて

2

プリミティブな整数の配列からセットを初期化しようとしています。あなたはこの

List list=Arrays.asList(no); 

を行うとListが型なしであることから、あなたは整数配列のリストを構築します。 List<Integer>が必要なので、これは間違いなくあなたが探しているものではありません。

幸いなことに、これは修正するのは非常に簡単です:no

Integer[] no=new Integer[l1]; 

の変更宣言をし、次のようにlistを構築:

List<Integer> list = Arrays.asList(no); 

他のすべてが正常に動作する必要があります。

0

Set<Integer> set=new LinkedHashSet<Integer>(list);未確認の警告が生成されます。これは、listの正しいジェネリックタイプがList<int[]>であることを隠すので、はIntegersではなく、intの配列を含んでいます。これはClassCastExceptionによって報告されたものです:int[][Iと呼ばれます)はIntegerにキャストできません。

このコードを修正する最も簡単な方法はnoint[]ではなくInteger[]と宣言することです。この場合、Arrays.asListは正しくタイプされたList<Integer>を返します。

関連する問題