2014-02-21 88 views
-1

我想让一个方法允许用户输入一个数组和一个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

您无法从void方法返回值。在这种情况下,你想要一个ArrayList 的返回类型。 –

回答

2

a是一个数组,而不是ArrayList。您正在寻找的模拟操作是a.lengtha[i]

还应该注意,您的方法签名是void,因此您的错误“无法从void类型返回”。你想要返回ArrayList<Double>

所以,您的签名会这样写:

public static ArrayList<Double> scaleA(double[] a, double s) 
+0

谢谢你,完美的作品。 – user2975192

0

遍历数组使用array.lengthsize()List的一种方法。

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

0

除了这些答案是你想回到你会想从虚空改变你的返回类型ArrayList的

1

如果它打算成为一个无效的方法ArrayList中,你不应该返回任何东西。虚拟方法更多的是用于处理事情,而不是计算事物。在这种情况下,你甚至不需要创建一个新的数组,但只需要改变数组中的值(事实上,如果你试图返回一些东西,Java会对你生气)。你仍然可以使用回报;但是你只写了这个陈述,因为你不应该或者不允许返回任何东西。

还值得注意的是,在这种情况下,double[] a参考,这意味着它只发送该数组的位置作为参数。这意味着对方法内的数组所做的更改会影响数组中的数组值(与s相比,它可以更改为其他值(即s = 3;),并且发送到方法的值不会更改在该方法之外)。

这里是你将如何改变这些值内的一个例子:

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; 
}