返回一个数组

时间:2014-02-21 02:37:00

标签: java

我正在尝试创建一个方法,允许用户输入一个数组以及数组乘以的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;)

为什么我会出现这些错误?

感谢。

4 个答案:

答案 0 :(得分:2)

a是一个数组,不是一个ArrayList。您正在寻找的模拟操作是a.lengtha[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.lengthsize()List的方法。

请注意,ArrayList和数组是不同的东西。

答案 3 :(得分:0)

除了这些答案之外,你想要返回你的ArrayList,你想要将你的返回类型从void更改为ArrayList