如果我在提出这个问题时犯了任何错误,我会提前道歉。我是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() {
}
}
答案 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
类。