使用for循环将双数组值添加到arraylist

时间:2014-03-13 23:53:50

标签: java arraylist

如果我在提出这个问题时犯了任何错误,我会提前道歉。我是stackoverflow和java的新手。

我的问题是我希望能够将普通的双精度数组转换为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() {

    }
}

1 个答案:

答案 0 :(得分: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();
        }

    };

正如您所看到的,这没有意义,因为您无法将构造函数添加到匿名实例,并且您的接口不包含setter。

请注意:NumList实际上不是Num,因为它不适合您创建的Num抽象。

所以我的建议是使用NumDouble这样:

nums.add(new NumDouble(value));

或创建一个新的Num类。