2013-11-18 4 views
1

Зачем нужна ошибка в .ToArray. (Синтаксис) Кажется, что im дает правильное значение параметра.Почему я получаю синтаксическую ошибку

Спасибо за ваш ответ.

import java.util.LinkedList; 

public class Vector { 


private double doubleComposantes[]; 
private int intNombreDeComposante = 0; 


public Vector(String strComposantes) { 

    strComposantes = strComposantes.trim(); 
    intNombreDeComposante = getNumberOfComposantes(strComposantes); 
} 

private int getNumberOfComposantes(final String strComposantes) { 

    return strComposantes.split(",").length; 
} 


private double[] getAllComposantes(final String strComposantes) { 

    final String[] strComposantesSplitted = strComposantes.split(","); 
    LinkedList<Double> doubleComposantesConvertis = new LinkedList<Double>(); 

    for (String strComposante : strComposantesSplitted) { 

     doubleComposantesConvertis.add(Double.valueOf(strComposante)); 

    } 

    int intLongueur = doubleComposantesConvertis.size(); 
    return doubleComposantesConvertis.toArray(new double[intLongueur]); // error at toArray() 
} 

} 
+1

Измените 'double' на' Double'. – GriffeyDog

ответ

0

toArray() получает массив объектов, вы передаете массив double, и это примитив, а не объект. Автобоксинг не применяется для массивов.

1

Используйте вместо этого:

doubleComposantesConvertis.toArray(new Double[intLongueur]); 

Обратите внимание, что Double в верхнем регистре. Это потому, что это объект, а не примитив.

+0

Тип возврата double [] not Double [] – m0skit0

+0

@ m0skit0 Тип возвращаемого метода, в котором вы находитесь, не изменяет типы параметров используемых вами библиотек. Это может произойти с дженериками, но обратите внимание, что 'T'' toArray' не имеет никакого отношения к 'double []' его 'getAllComposantes'. –

+0

Я имею в виду 'return doubleComposantesConvertis.toArray (новый Double [intLongueur])' будет поднимать ошибку компиляции. – m0skit0

0

double[] не Double[]. Вы либо меняете свое возвращаемое значение на Double[], либо вручную создаете double[].

Предлагаю избегать использования массивов в вашем коде и вместо этого использовать List. Таким образом, у вас не будет этой проблемы. Используйте только массивы, когда это необходимо.

private List<Double> getAllComposantes(final String strComposantes) { 
    final String[] strComposantesSplitted = strComposantes.split(","); 
    final List<Double> doubleComposantesConvertis = new LinkedList<Double>(); 
    for (String strComposante : strComposantesSplitted) { 
     doubleComposantesConvertis.add(Double.valueOf(strComposante)); 
    } 
    return doubleComposantesConvertis; 
} 

Также убедитесь, что вам нужно LinkedList по какой-то причине вместо ArrayList (который will perform better in most cases).

5

toArray подписи в LinkedList является

public <T> T[] toArray(T[] a) 

и так T будет стерт с Object во время выполнения вы можете использовать только Object типов здесь, а не примитивные тип. Попробуйте с Double вместо double

return doubleComposantesConvertis.toArray(new Double[intLongueur]); 

Уведомление вы также должны изменить тип возврата вашего метода Double[]


Update:

если вы хотите вернуть double[] и может использовать внешний библиотеки, то вы можете использовать Doubles.toArray от guava.

return Doubles.toArray(doubleComposantesConvertis);//will return double[] 
+0

Ах да! Я не думаю, что Double будет работать.Вы знаете другую альтернативу, или я должен написать свой собственный метод для копирования всех элементов списка в массиве – MalikDz

+0

Это тоже не сработает, тип возврата - 'double []'. – m0skit0

+0

@MalikDz, к сожалению, вы не сможете использовать встроенные методы для создания 'double []'. Вам придется копировать свои элементы вручную или использовать некоторые внешние библиотеки. Я подозреваю, что у гуавы могут быть некоторые классы, которые могут быть полезны здесь, но я их еще не использовал. – Pshemo

0

Указанные изменения затронут вашу проблему, но на самом деле вам будет лучше использовать метод аргументов 0-аргумента toArray.

Смежные вопросы