提问者:小点点

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


如果我在问这个问题时犯了任何错误,我会提前道歉。我不熟悉stackoverflow和java。

我的问题是,我希望能够将一个普通的double数组转换为arraylist,我需要对这个arraylist元素进行操作,以便将值从x更改为-x(使用接口)

我正试图首先使用for循环元素逐个元素将数组double转换为arraylist(我认为应该先得到它),但.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个答案

匿名用户

您可以使用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。

因此,我的建议是要么像这样使用NumDouble

nums.add(new NumDouble(value));

或者创建一个扩展Num的新类。