2016-10-02 58 views
-1

這是最後一部分創建構造函數我不明白這種自動售貨機類

到目前爲止,自動售貨機類沒有任何構造函數。不帶構造函數的類的實例始終構造爲所有實例變量設置爲零(如果它們是對象引用,則爲null)。提供一個明確的構造函數總是一個好主意。

提供兩個構造爲自動售貨機類:

1),其與10個汽水罐

2)構造函數初始化的自動售貨機中的默認的構造,自動售貨機(INT罐),初始化自動售貨機與罐給定數量的 兩個構造函數應該初始化令牌計數爲0

這個方案實驗室是:

2.1。在這個實驗中,你將實施一臺裝有蘇打水的自動售貨機。要購買一罐蘇打水,顧客需要在機器中插入一個令牌。當令牌被插入時,罐頭可以從罐頭儲存器落入產品交付槽中。自動售貨機可以裝滿更多罐頭。目標是確定在任何給定時間機器中有多少罐和令牌。

您會爲VendingMachine類提供哪些方法?非正式描述他們。

2.2。現在將這些非正式描述翻譯成Java方法簽名,如

public void fillUp(int cans) 

給出方法的名稱,參數和返回類型。不要執行它們。

2.3。這些方法需要哪些實例變量來完成他們的工作?提示:您需要跟蹤罐和令牌的數量。
用它們的類型和訪問修飾符聲明它們。

2.4。考慮用戶在自動售貨機中插入令牌時會發生什麼情況。令牌數量增加,罐頭數量減少。實現方法:

public void insertToken() 
{ 
    // Instructions for updating the token and can counts 
} 

您需要使用您在上一步中定義的實例變量。 不要擔心自動售貨機中沒有罐子的情況。在本課程後面,您將學習如何編寫決定「如果可以計數> 0」。現在,假設如果自動售貨機爲空,則不會調用insertToken方法。

2.5。現在實現一個方法`fillUp(int cans) 向機器添加更多罐子。只需將新罐的數量添加到罐數即可。

2.6。接下來,實現兩個方法getCanCount和getTokenCount,它們返回罐和令牌計數的當前值。 (您可能需要查看BankAccount類的getBalance方法以獲得指導。)

2.7。你已經實現了VendingMachine類的所有方法。 把它們連成一個類,像這樣:

public class VendingMachine 
{ 
    private your first instance variable 
    private your second instance variable 
    public your first method 
    public your second method 
    . . . 
} 

2.8現在完成以下測試程序,以便它行使所有的類的方法。

public class VendingMachineTester 
{ 
    public static void main(String[] args) 
    { 
     VendingMachine machine = new VendingMachine(); 
     machine.fillUp(10); // Fill up with ten cans 
     machine.insertToken(); 
     machine.insertToken(); 
     System.out.print("Token count: "); 
     System.out.println(machine.getTokenCount()); 
     System.out.println("Expected: . . ."); 
     System.out.print("Can count: "); 
     System.out.println(machine.getCanCount()); 
     System.out.println("Expected: . . ."); 
    } 
} 
+0

「沒有構造函數的類的實例總是與設置爲零的所有實例變量構建」 - 這是不正確的開始,如字段可以有字段初始值...我稍微擔心你使用的教科書(或其他)的質量:( –

+1

)不同意「太廣泛的投票」。他顯示整個實驗室,並說他不明白的是如何創建兩個構造函數,一個需要一個參數,另一個使用默認值。沒有太多關於這個的。 – nhouser9

+0

問題是,有太多的實驗室張貼在這裏t與潛在的問題無關。如果這些位被刪除並且相關的位都是剩下的,這將是一個完全合理的問題。 –

回答

1

見有關構造函數的這個鏈接,文檔:https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

構造函數是簡單的,就是始終在您創建對象調用的第一件事情的方法。因此變量初始化通常在構造函數中完成。

在你的情況下,它應該是這個樣子:

public class VendingMachine 
{ 
    //replace this with whatever variable name you used for the number of cans 
    private int numCans; 

    //the default constructor 
    public VendingMachine() { 

     //call the other constructor with the default value, 10 
     this(10); 
    } 

    //the constructor which takes an argument 
    VendingMachine(int cans) { 

     //set the number of cans equal to the passed argument 
     numCans = cans; 
    } 

    //insert all other methods and fields you already wrote for this class 
} 
+1

IMO將無參數方法鏈更改爲參數化方法鏈會更好,以減少代碼重複。這個簡單的例子並不重要,但這是一個很好的習慣。如果有一個規範構造函數是所有其他構造函數鏈接的,那麼可以更容易地證明一切都已正確初始化。 –

+0

好的非常感謝你! –

+0

但是,如何讓兩個構造函數將令牌計數初始化爲0? –