我正在尝试创建一个方法,允许用户输入一个数组以及数组乘以的double,然后返回新数组,但是我收到错误。
以下是代码:
public static void scaleA(double[] a, double s) {
ArrayList<Double> newarray = new ArrayList<Double>();
double newarray1 = 0;
for (int i = 0; i < a.size(); i++) {
newarray1 = s * a.get(i);
newarray.add(newarray1);
}
return newarray;
}
但是我收到错误:
error: cannot find symbol (for a.size() and a.get(i))
和
error: cannot return a value from method whose result type is void (for return newarray;)
为什么我会出现这些错误?
感谢。
答案 0 :(得分:2)
a
是一个数组,不是一个ArrayList
。您正在寻找的模拟操作是a.length
和a[i]
。
还应注意,您的方法签名为void
,因此您的错误“无法从void
类型返回”。您想要返回ArrayList<Double>
。
因此,您的签名将如下所示:
public static ArrayList<Double> scaleA(double[] a, double s)
答案 1 :(得分:1)
如果它是一个虚空方法,你不应该返回任何东西。虚假方法更多的是做事而不是计算事物。在这种情况下,您甚至不必创建新数组,但只需要更改数组中的值(事实上,如果您尝试返回某些内容,Java会对您生气)。你仍然可以使用return;但是你只写了声明,因为你不应该或允许返回任何东西。
值得注意的是,在这种情况下,double[] a
是引用,这意味着它只发送该数组的位置作为参数。这意味着对方法内部数组所做的更改会影响方法外部数组中的值(与s相反,可以将其更改为其他内容(即s = 3;
),并将值发送到方法不会在那种方法之外改变)。
以下是如何更改a:
中的值的示例public static void scaleA(double[] a, double s) {
for(int i = 0; i < a.length; i++)
a[i] *= s;
}
或者,如果您希望将a
中的值保留为原样并返回更改的数组,则可以执行以下操作:
public static double[] scaleA(double[] a, double s) {
double[] b = new double[a.length];
for(int i = 0; i < a.length; i++)
b[i] = a[i]*s;
return b;
}
答案 2 :(得分:0)
要迭代数组,请使用array.length
。 size()
是List
的方法。
请注意,ArrayList和数组是不同的东西。
答案 3 :(得分:0)
除了这些答案之外,你想要返回你的ArrayList,你想要将你的返回类型从void更改为ArrayList