2014-02-21 87 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; 
}