2

コーデしてみた

double temp=0;
List list=new ArrayList();
list.add(1.1);
temp+=list.get(0); //error occurs here

発生したエラーは以下の通り

二項演算子 '+' のオペランドの型が正しくありません

最初のタイプ: ダブル

2 番目のタイプ: オブジェクト

リストに temp 値と double 値を追加するにはどうすればよいですか?

私が好むプログラミング言語は Java です。

4

3 に答える 3

4

プリミティブ ラッパー クラス Double を使用する必要があります。

List<Double> list=new ArrayList<Double>();
list.add(new Double(1.1));
于 2013-01-26T10:38:50.647 に答える
3

でプログラミングするときは、 、などの型に常に使用する必要がありGeneric typeます。CollectionsListArrayListJava 1.5+

raw typeリストを使用すると、メソッドList.get(0)は常に型を提供しますObject。これを機能させるには、型をキャストする必要があります。

したがって、現在のコードにキャストを追加することもできますがDouble、これは絶対に悪い考えです。

または、次genericのバージョンの List を使用する必要があります。

List<Double> list=new ArrayList<Double>();
list.add(1.1);

1.1は ですが、doubleに変換しなくても直接追加できることに注意してくださいDouble。これは、という機能によるものJavaですAuto Boxing

Java では、参照にdouble値を格納すると、値は自動的に にボックス化されます。逆の場合は、つまり from toと呼ばれます。DoubledoubleDoubleUnboxingDoubledouble

そのため、次の場合: -

temp+=list.get(0);

の値list.get(0)はタイプDoubleです。そして、doubleプリミティブ型で演算を行っているため、その値は自動的boxeddoubleになり、加算演算が行われます。

于 2013-01-26T10:47:31.793 に答える
2

ジェネリック型を定義しない場合。リストはオブジェクトを返します。つまり、キャストする必要があります。

temp+=(Double) list.get(0);

リストの宣言でジェネリック型を直接定義する方が簡単ですが、次のようになります。

List<Double> list=new ArrayList();

補足:

Doubleこれを機能させるには、代わりにを使用する必要がありますdoubledoubleはプリミティブ型であるDoubleのに対し、はリストに格納できるJavaオブジェクトであるため

于 2013-01-26T10:36:18.290 に答える