2013-11-09 67 views
0
public void setData(double[] d) { 
    if (d == null) { 
     data = new double[0]; 
    } else { 
     data = new double[d.length]; 
     for (int i = 0; i < d.length; i++) 
      data[i] = d[i]; 
    } 
} 

這個方法在我的代碼中用來設置數組的數據。我還需要編寫一個名爲reset()的方法,將給定的數組更改爲空值。另外,我們在這個實驗中練習超載。有四個版本的setData()(double,int,float,long)。由於Stat類內部使用double數組來存儲這些值,因此我只需要製作一個double類型的reset()方法?(我想我只需要一個......)最後,請給我一些提示,去做這個重置業務,因爲我所嘗試過的所有東西都失敗了,通常由諸如 「setData(double [] null)」等語句返回錯誤組成。java方法將數組的值更改爲null

+0

你不能,除非它是一個實例變量。如果數組作爲參數傳遞,則可以更改數組元素,但不能更改數組本身。 – BackSlash

+0

數組變量「d」是一個參考。如果您想將該引用的值更改爲「null」(如在方法外部看到的那樣),那麼「setData()」必須是* FUNCTION *(而不是「void」過程)。 – paulsm4

+0

我認爲,setData(null)已經'重置'數據數組。 (它不會將它設置爲null,而是將其設置爲空數組 - 我應該這樣做)。 – isnot2bad

回答

0

因爲java是通過值傳遞的,所以您不能重新分配作爲參數傳遞給變量的變量,並期望看到變化反映在外部。

你能做什麼,就是把數組中的某種包裝類的這樣的:

然後:

void setData(ArrayReference<Double> myReference) { 
    myReference.array = null; 
} 
1

在java中的所有內容是通過;即使引用也是按值傳遞的。因此,通過在方法中傳遞數組,可以更改數組的內容,但不能更改數組指向的內容。現在,如果你在一個類中,碰巧傳遞了一個實例成員,而這個實例成員因爲在類中已經可以訪問,你可以將該數組設置爲null

如果您總是希望能夠更改數組指向的內容,那麼只需要一個返回數組(而不是void)的函數,並將返回的值分配給感興趣的數組。

0

我不知道如果我理解你的問題,但這是你想要的嗎?