2016-10-02 57 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? –