2010-02-20 40 views
12

我不知道如何將雙精度鏈接列表轉換爲數組。請幫我看看這個錯誤。如何使用`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

謝謝你。那幫助我解決問題 – kathy

回答

4

的問題是你的名單,這是Double(對象)的類型,當你試圖返回double類型(基本類型)的數組。如果您更改getValues()以返回Double[],則應編譯您的代碼。

對於其他方法,這不是問題,因爲Java會自動將Double s轉換爲double s並返回(稱爲自動裝箱)。它不能爲數組類型做到這一點。

1

toArray定義爲返回T[]其中T是一個泛型參數(無論如何都是單參數版本)。由於基元不能用作通用參數,因此toArray不能返回double[]

24

List<Double>List#toArray()返回Double[]Double[]double[]不一樣。由於數組是對象,而不是基元,因此autoboxing規則不適用於此,也不適用於此。

要麼使用Double[]代替:

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

...或者使用一個簡單的循環for創建double[]自己:

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

謝謝。那幫助我解決了問題 – kathy

+4

ow,O(n^2)for循環?爲什麼不'int i = 0; for(Double v:list)array [i ++] = v;' – naiad

+0

是的,第二個選項非常糟糕。 Sparkleshy的建議會好得多。 – sage88