我不知道如何将双精度链表转换为数组。请帮我找到错误。
import java.util.*;
public class StackCalculator {
private LinkedList<Double> values;
double value1 , value2 ;
public StackCalculator()
{
values = new LinkedList<Double>();
}
void push(double x)
{
values.addFirst(x);
}
double pop()
{
return values.removeFirst();
}
double add()
{
value1=pop();
value2=pop();
return (value1 + value2);
}
double mult()
{
value1=pop();
value2=pop();
return (value1 * value2);
}
double[] v = new double[10];
double[] getValues()
{
return values.toArray(v);
}
}
答案 0 :(得分:26)
List#toArray()
的{{1}}会返回List<Double>
。 Double[]
与Double[]
不同。由于数组是对象而不是基元,因此autoboxing规则不适用于此处。
使用double[]
代替:
Double[]
...或使用简单的Double[] array = list.toArray(new Double[list.size()]);
循环创建double[]
:
for
答案 1 :(得分:4)
问题是列表的类型,即Double
(对象),而您尝试返回类型double
(基本类型)的数组。如果您更改getValues()
以返回Double[]
,则应编译代码。
对于其他方法,这不是问题,因为Java会自动将Double
转换为double
并返回(称为自动装箱)。对于数组类型,它不能这样做。
答案 2 :(得分:1)
toArray
被定义为返回T[]
,其中T是泛型参数(无论如何单参数版本)。由于原语不能用作泛型参数,因此toArray无法返回double[]
。