如果我在问这个问题时犯了任何错误,我会提前道歉。我不熟悉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() {
}
}
您可以使用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
的新类。