2014-03-13 103 views
2

如果我在提出這個問題時發生任何錯誤,請提前道歉。我是新來的stackoverflow和Java。使用for循環向陣列列表添加雙數組值

我的問題是,我希望能夠以雙打的一個普通的數組轉換爲一個ArrayList,我需要此ArrayList元素明智的,從X更改值-x(使用接口)

上運行我想只是獲得數組雙打轉換爲一個ArrayList元素首先使用for循環元素(認爲我應該得到的是首先工作),但.add似乎並沒有工作,這是我研究時似乎出現的解決方案它。目前它說「無法實例化類型Num」我試圖刪除抽象仍然沒有好處。

我對這個完全錯誤嗎?提前感謝您的幫助。

這是我的代碼。

public interface Num { 
    public void neg(); // negation 
    public void sqrt(); // square root 
    public String asString(); // number represented as a string 
} 

public class NumDouble implements Num { 

    Double d; 
    public NumDouble(Double d) { 
     this.d = d; 
    } 

    @Override 
    public void neg() { 
     d = -d; 
    } 

    @Override 
    public void sqrt() { 
     d = Math.sqrt(d); 
    } 

    @Override 
    public String asString() { 
     return d.toString(); 
    } 

} 

這是代碼我一直在努力

import java.util.ArrayList; 
import java.util.Arrays; 

public abstract class NumList implements Num { 

    ArrayList<Num> nums = new ArrayList<Num>(); 
    double[] doubles = {2.3, 2.2, 2.4}; 

    public void neg() { 
     for (int i = 0; i < doubles.length; i++) { 
      double value = doubles[i]; 
      nums.add(new Num(value)); <------this is highlighting as an error 
     } 
     return; 
    } 

    public void sqrt() { 

    } 
} 
+6

它應該是'new NumDouble(value)' - 你不能實例化接口 – fge

+1

他實際上可以創建一個接口的匿名實例。 –

+0

非常感謝您的幫助,解決了一個問題哈哈! – SteveK

回答

1

您可以使用NumDouble這樣做或創建的Num匿名實例。

後者看起來就像是這樣的:

Num num = new Num() { 

     Double d; 

     @Override 
     public void neg() { 
      d = -d; 
     } 

     @Override 
     public void sqrt() { 
      d = Math.sqrt(d); 
     } 

     @Override 
     public String asString() { 
      return d.toString(); 
     } 

    }; 

正如你可以看到這是沒有意義的,因爲你不能構造函數添加到一個匿名實例和接口不包含一個二傳手。

只是說明:NumList不是Num,因爲它不適合您創建的Num抽象。

所以我的建議是要麼使用NumDouble這樣的:

nums.add(new NumDouble(value)); 

,或者創建延伸Num一個新的類。