public MonomialPolynomial(double... coeffs){
List<IMonom> monoms = new ArrayList<IMonom>();
for (int i = 0; i < coeffs.length; i++) {
// zero coeffs might yaffect the degree
if(coeffs[i] != 0)
monoms.add(new Monom(coeffs[i], i));
}
super.monoms = monoms;
}
为什么人们在表达数组时会写double...
而不是[] double
?
对此有特殊意义吗?
答案 0 :(得分:4)
double...
声明它是一个“var args”参数 - 在你的方法中它与<{1}} 相同但是对于调用者来说,用调用它会容易得多不需要显式创建数组的不同数量的参数(因此是var args):
没有var args:
double[]
使用var args:
MonomialPolynomial(double[] coeffs) { ...}
...
// explicit array creation necessary
new MonomialPolynomial(new double[] {1, 2, 3)};
编辑:要注意var args,只有方法的最后一个参数可以是var args参数。这保证了在调用方法时没有歧义,例如
MonomialPolynomial(double... coeffs) { ...}
...
// array gets created implicitly, so less boilerplate code
new MonomialPolynomial(1, 2, 3);
是不明确的,因为第一个参数将始终分配给foo(int a, int b...)
,之后的任何内容都会进入a
。
b
是暧昧的,没有办法判断foo(int a..., int... b)
是foo(1, 2, 3)
还是a={1} and b={2, 3}
。
答案 1 :(得分:1)
double...
是一个varargs(可变参数)功能。这意味着您可以为构造函数提供double
的数组,或者您可以为构造函数提供任意数量的double
,并将它放入数组中。 (例如:MonomialPolynomial(1.0, 5.0, 6.0)
。)
答案 2 :(得分:0)
它是vararg
特性,即函数获取的所有参数都被收集到一个数组中。在这种情况下,一系列双打。该功能适用于硬编码阵列等。如果MonomialPolynomial
要接受double[]
,则必须使用此类oneliners:
MonomialPolynomial(new double[] {1, 2, 3});
但是使用变量参数,你可能会编写一些更简洁的代码:
MonomialPolynomial(1, 2, 3);