2014-11-22 111 views
-2

我正在爲一個Yahtzee遊戲開發一個Java項目,並且需要創建一個參數化構造函數,它爲我的兩個實例變量提供了它們的值。我的兩個實例變量是數組。以參數化構造函數創建一個對象作爲參數的問題

public DiceArray(int[] die) 
{ 
    die = new int[5]; 
    for(int i = 0; i < die.length; i++) 
    { 
     die[i] = 0; 
    } 

    keep = new boolean[5]; 
    for(int i = 0; i < keep.length; i++) 
    { 
     keep[i] = false; 
    }  
} 

當我嘗試在我的應用程序類來創建對象與

// Testing parameterized constructor 
    DiceArray myDice = new DiceArray(); 

我得到線程異常「主要」 java.lang.Error的:未解決的問題編譯: 構造DiceArray()是undefined

當我從方法中取出參數時,它工作正常。在此先感謝您的任何幫助

+0

呼叫用INT []作爲參數 – Benvorth 2014-11-22 15:05:40

回答

0

您還沒有定義的默認構造函數和你想調用默認的構造函數,爲什麼編譯器不開心。

你需要使用參數的構造函數,你的情況,如:

int num[] = new int[5]; 
DiceArray myDice = new DiceArray(num); 

而且從你的方法刪除NUM數組初始化,因爲它是不建議修改你的方法/構造得到,因爲它不會參數的對我們上面定義的調用方法有任何影響(即,它不會改變您在調用構造函數之前定義的數組num中的任何內容)。

其實,我沒有看到你應該使用構造函數在所有。 (假設你已經在對象級聲明瞭num和result數組),默認情況下,當你創建int數組時,默認情況下所有的值都將爲0,並且對於結果,即布爾數組,它們將默認爲false。

所以,只要刪除構造函數和它的身體,它應該工作。

+0

哦,我認爲這是有道理的。我會有一段時間,看看我能不能解決它。感謝您的幫助。 – Espinal 2014-11-22 15:14:18

+0

謝謝,幫助我清楚這一切。 – Espinal 2014-11-22 15:26:06

0

您已經定義了構造函數來接受一個參數,但您試圖用零參數調用它。所以,你可以從構造函數定義中刪除參數:

public DiceArray() { 
    ... 
} 

,或者您可以使用參數:

int[] num = new int[5]; 

DiceArray myDice = new DiceArray(num); 
+0

我覺得我做的想出來,你給我的構造函數。如果我已經實例化變量,int [] num = new int [5]仍然適用嗎?我仍然想出了同樣的錯誤。 – Espinal 2014-11-22 15:09:16

0

你嘗試過什麼,

DiceArray myDice = new DiceArray(); 

是instatiating用默認的構造函數的myDice。從Wikipedia

In both Java and C#, a "default constructor" refers to a nullary constructor that is automatically generated by the compiler if no constructors have been defined for the class. The default constructor is also empty, meaning that it does nothing. A programmer-defined constructor that takes no parameters is also called a default constructor

當你創建一個參數化的構造,不會產生默認的,什麼sunysen是說要麼創建一個默認的構造函數,或使用參數化的一個創建對象。

注意其他錯誤,因爲你說,保持是你的實例變量中,死在構造變化對實例變量沒有影響,因爲它是由可變陰影同名的構造函數。爲了解決這個問題,前綴關鍵字

public DiceArray(int[] die) 
{ 
    this.die = new int[5]; 
    ... 
} 
相關問題