2010-02-20 23 views
12

No sé cómo convertir una lista vinculada de dobles en una matriz. Por favor, ayúdame a encontrar el error.Cómo convertir lista enlazada a una matriz usando `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); 
    } 

} 
+0

gracias .Eso me ayudó a resolver el problema – kathy

Respuesta

4

El problema es el tipo de su lista, que es Double (objeto), mientras que usted está tratando de devolver una matriz de tipo double (tipo primitivo). Su código debe compilarse si cambia getValues() para devolver un Double[].

Para sus otros métodos, no es un problema, porque Java convierte automáticamente Double s a sy viceversa (llamado autoboxing). No puede hacer eso para los tipos de matriz.

1

toArray se define para devolver T[] donde T es un argumento genérico (la versión de un solo argumento es de todos modos). Como las primitivas no se pueden usar como argumentos genéricos, toArray no puede devolver double[].

24

List#toArray() de List<Double> devuelve Double[]. El Double[] no es lo mismo que double[]. Como las matrices son objetos, no primitivas, las reglas autoboxing no se aplican ni pueden aplicarse aquí.

O bien utilizar Double[] lugar:

Double[] array = list.toArray(new Double[list.size()]); 

... double[] o crear por sí mismo utilizando un simple bucle for:

double[] array = new double[list.size()]; 
for (int i = 0; i < list.size(); i++) { 
    array[i] = list.get(i); // Watch out for NullPointerExceptions! 
} 
+0

gracias .Es ayudado me resuelve el problema – kathy

+4

ow, O (n^2) para el ciclo? ¿por qué no? int i = 0; para (Doble v: lista) array [i ++] = v; ' – naiad

+0

Sí, esa segunda opción es bastante terrible. La sugerencia de Sparkleshy sería mucho mejor. – sage88

Cuestiones relacionadas