Как преобразовать linkedlist для выстраивания использования '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);
    }

}
13
задан peterh says reinstate Monica 30 March 2015 в 16:51
поделиться

3 ответа

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!
}
26
ответ дан 1 December 2019 в 20:11
поделиться

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

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

4
ответ дан 1 December 2019 в 20:11
поделиться

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

1
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: