2012-03-22 6 views
0

私は実際に何かをやっていると確信していますが、これを理解できないようです。私は基本的に数値の束を取り、いくつかの仕事をし、整数のリストを返すメソッドを持っています。データが整数であると確信すると 'Objectからintにキャストできません'というエラーが発生しました

それから、JVMがそのオブジェクトを考えるので、私はエラーを取得していたときに、そのリストを取得してより多くの作業を行うメソッドに送信します。ここでは簡単な例です(私はあなたのアイデアを得るので、それを少し編集し、そのスーパーロングではないよ):まず

public static List normalizer_list(double[] data) { 
    List normalizer_list = new ArrayList(); 
    for (double current_data : data) { 
     Integer modified_data = (int) (current_data *1000); 
     normalizer_list.add(modified_data); 
    } 
    return normalizer_list; 
} 


private static void do_some_work(List normalizer_list) { 
    // TODO Auto-generated method stub 

    for (int i = 0; i < norm_data.size(); i++) { 
     Integer current_norm_data = (int) normalizer_list.get(i); 

私はnorm_data.get(I)で数学を実行しようとしましたが、それは私にエラーを与えましたそれはオブジェクトだと思ったので、Integerにキャストしようとしましたが、それはできません。私が間違って何をやっている(それは私がリストを使用している方法です?)

+0

次のコードを使用することができます。メソッドdo_some_workでは、変数はnorm_dataかnormalizer_listか?私はここに変数名を混ぜたと思います。 – Sean

+0

@Seanはあなたの権利を残念に思っています。しかし、私のコードではうまくいきました。私はそれを修正します。 –

答えて

8

Integerとして出演:

Integer current_norm_data = (Integer) norm_data.get(i) 

いっそ、normalizer_listList<Integer>を行い、その後に整数のリストを受け入れますdo_some_work方法。

+0

聖なる牛!私はintとIntegerの違いが分かっていません。言語を設計した人は、私が入力したくないと思っただけです。私はこれを読むつもりです。 –

+3

'Integer'はラッパーですが、' int'はプリミティブです。 Java 1.5以来、あなたはそれらの間に行くことができます。通常のコレクションにプリミティブを追加することはできません。ラッパー型で '=='演算子を使うのは危険です。これはJavaの本当に重要なディテールです。だから、私は個人的にこのトピックについてもっと読むことを勧めます。 –

+0

ありがとうDilium、私はそれについて詳細を読むでしょう。答えをありがとう。私は整数とintの違いを2つ知りました。リストの型を宣言する必要があります(たとえすべての内容が同じ型であっても、これはPythonの世界とは異なります)。ありがとうDilum。 –

0

おそらく、リストを使ってデータを入れてみて、すべてのキャスティングを取り除くべきでしょうか?

0

あなたは文句を言わないコンパイルInteger.valueOf();

Integer modified_data = Integer.valueOf(current_data *1000); 
関連する問題