2015-03-13 125 views
-2

我寫下面的代碼。它得到這個消息:在線程 「主要」 java.lang.ClassCastException[D不能轉換爲java.lang.Double

例外:[d不能轉換爲java.lang.Double的

double[] xyz = {1, 11, 111, 2, 22, 222}; 
ArrayList array = new ArrayList(); 

array.add(xyz); 

double[] vals = new double[array.size()]; 

vals[0] = (double) array.get(0); 
vals[1] = (double) array.get(1); 
vals[2] = (double) array.get(2); 

我也搜索,看到一些張貼在堆棧溢出,但他們沒有多少意義。我該怎麼辦?

+2

可能[什麼是原始類型,爲什麼我們不應該使用它?]的副本(http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use -it) – 2015-03-13 14:27:21

+4

這沒有任何意義,'array.add(xyz);'。向我們展示***恰好***添加到該ArrayList中的關鍵是非常重要的。無論如何,你應該使用'ArrayList '。 – 2015-03-13 14:27:22

+2

它不是'D',而是'[D',也就是一個'double'的數組。 – fge 2015-03-13 14:30:24

回答

6

如果你想double值數組添加到一個ArrayList,這樣做:

Double[] xyz = {...}; 
ArrayList<Double> array = new ArrayList<>(); // note, use a generic list 
array.addAll(Arrays.asList(xyz)); 

一個List不能存儲原語,所以你必須存儲Double值不double。如果您有現有的double[]變量,則可以使用ArrayUtils.toObject()進行轉換。

+0

坦克很多。它解決了。 – 2015-03-13 16:54:49

3

其實你的問題是,你試圖將'xyz'類型,它似乎不是一個雙或Wrapper associed(雙),成爲一個雙。

由於java不能將'xyz'類型轉換爲雙精度型,因此ClassCastException就是拋出。你應該嘗試加入正翻一番,達到你的數組一樣,(甚至在一個循環中):

ArrayList<Double> myListOfDouble = new ArrayList(); 
myListOfDouble.add(1.0); 

,然後使用一個for循環來填充你的雙[]瓦爾斯是這樣的:

for(int i = 0; i < myListOfDouble.size(); i++) 
    vals[i] = myListOfDouble.get(i); 
相關問題