2015-03-13 54 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); 
相关问题