Подтвердить что ты не робот

Как преобразовать связанный список в массив с помощью `toArray()`?

Я не знаю, как преобразовать связанный список парных в массив. Пожалуйста, помогите мне найти ошибку.

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);
    }

}
4b9b3361

Ответ 1

List#toArray() List<Double> возвращает Double[]. Double[] не совпадает с Double[]. Поскольку массивы - это объекты, а не примитивы, правила autoboxing не применяются и не могут применяться здесь.

Вместо этого используйте 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!
}

Ответ 2

Проблема заключается в типе вашего списка, который является Double (object), в то время как вы пытаетесь вернуть массив типа Double (примитивный тип). Ваш код должен скомпилироваться, если вы измените getValues(), чтобы вернуть Double[].

Для других методов это не проблема, потому что Java автоматически преобразует Double в Double и обратно (называется autoboxing). Это не может быть сделано для типов массивов.

Ответ 3

toArray определяется как return T[], где T - общий аргумент (в любом случае вариант с одним аргументом). Поскольку примитивы не могут использоваться в качестве общих аргументов, toArray не может вернуть double[].