2016-02-29 83 views
0

我啓動這樣一個構造函數:我想寫一些測試試圖傳遞一個數組構造

public Unit(String name, double[] initialPosition, int weight, int strength, int agility, int toughness, 
     int currentHealth, int currentStamina) { 

,但要做到這一點,我需要知道的語法來傳遞一個數組構造函數。 我正在尋找一種方法來做到這一點,而不必在我調用構造函數之前定義數組。

+2

如果你不想讓你調用構造函數之前定義的數組,那麼爲什麼使它成爲一個參數?你總是可以重載構造函數 - 或者創建另一個不使用數組作爲參數的構造函數。 –

回答

3

要麼調用構造函數(在線)時創建數組:

new Unit("myname", new double[]{1.0,2.0},...); 

或調整你的構造函數使用可變參數:

public Unit(String name, int weight, int strength, int agility, int toughness, 
    int currentHealth, int currentStamina, double... initialPosition) { ... } 

//call 
new Unit("myname", w,s,a,t,c,stam, 1.0, 2.0); 

不過,我認爲你需要座標的特定號碼位置,所以我不會使用陣列,但一個對象爲:

class Position { 
    double x; 
    double y; 

    Position(x, y) { 
    this.x = x; 
    this.y = y; 
    } 
} 

public Unit(String name, Position initialPosition, int weight, int strength, int agility, int toughness, 
    int currentHealth, int currentStamina) { ... } 

//call: 
new Unit("myname", new Position(1.0, 2.0), ...); 

使用陣列的優點:

  • 它是類型安全的,即您傳遞位置而不是任意的雙精度數組。這樣可以防止您偶然在其他陣列中傳遞的錯誤。
  • 它定義了編譯時的座標數,即你知道一個位置的座標數(在我的例子中是2),而當使用一個數組(或可變參數基本相同)時,你可以傳遞任意數量的座標( 0到Integer.MAX_VALUE)。
1

調用構造單元時,您可以使用內聯參數...

例子:

Unit(String name, double[] initialPosition, int weight, int strength, int agility, int toughness, 
     int currentHealth, int currentStamina) { 

Unit("String name", new double[]{0.0, 1.1, 3.3}, 0, 3, 2, 1, 
     2, 4) { 

這是否看起來像你需要什麼???

+0

謝謝你的答案,但我接受了托馬斯的答案,因爲它說的相同,但也給出了更多的選擇 – Sander

0

當您將數組傳遞給任何方法或構造函數時,將傳遞其引用的值。參考意味着地址..

一個例子: 類:Unit

Double carray[]; //class variable (array) 
Unit(Double[] array) //constructor 
{ 
    this.carray=array; 
    this.carray={3.145,4.12345.....}; 
    //passing an array means, you are actually passing the value of it's reference. 
//In this case, `carray` of the object ob points to the same reference as the one passed 
} 

public static void main(String[] args) 
{ 
    Double[] arr=new Double[5]; 
    Unit ob=new Unit(arr); 
    //passes `reference` or `address` of arr to the constructor. 
} 
+0

這不適合「我正在尋找一種方法來做到這一點,而不必在我調用構造函數之前定義數組「。 – Thomas

+0

@Thomas編輯它。 –

+0

這不會使IMO更好。您現在定義一個全爲空的5個元素的數組。我猜想OP想傳遞一些值而不是在構造函數中創建它們。 – Thomas