Как преобразовать связанный список в массив, используя `toArray ()`? - PullRequest
13 голосов
/ 21 февраля 2010

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

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

}

Ответы [ 3 ]

26 голосов
/ 21 февраля 2010

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!
}
4 голосов
/ 21 февраля 2010

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

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

1 голос
/ 21 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...