Я не знаю, как преобразовать связанный список, удваивается до массива. Помогите мне найти ошибку.
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);
}
}
List # toArray ()
из List
возвращает Double []
. Double []
- это не то же самое, что double []
. Поскольку массивы являются объектами, а не примитивами, правила автобокса здесь не применяются и не могут применяться.
Вместо этого используйте Double []
:
Double[] array = list.toArray(new Double[list.size()]);
... или создайте double []
самостоятельно, используя простой цикл for
:
double[] array = new double[list.size()];
for (int i = 0; i < list.size(); i++) {
array[i] = list.get(i); // Watch out for NullPointerExceptions!
}
Проблема в типе вашего списка, который является Double
(объект), в то время как вы пытаетесь вернуть массив типа double
(примитивный тип). Ваш код должен скомпилироваться, если вы измените getValues()
на Double[]
.
Для других ваших методов это не проблема, потому что Java автоматически преобразует Double
s в double
s и обратно (это называется автобоксинг). Она не может сделать это для типов массивов.
toArray
определен для возврата T[]
, где T - общий аргумент (в любом случае, одноаргументная версия). Поскольку примитивы не могут использоваться в качестве общих аргументов, toArray не может возвращать double[]
.