diff --git a/README.md b/README.md index ee11f2c..17816bb 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,32 @@ Work through all these exercises. You edit this file with your answers for these * You can insert several separate amounts of money into the machine, just like you might insert multiple coins or notes into a real machine. Try inserting the exact amount required for a ticket. As this is a simple machine, a ticket will not be issued automatically, so once you have inserted enough money, call the `printTicket` method. A facsimile ticket should be printed in the BlueJ terminal window. ### Exercise 2.2 -* What value is returned if you check the machine’s balance after it has printed a ticket? +* What value is returned if you check the machine’s balance after it has printed a ticket? + +```java +0 +``` ### Exercise 2.3 * Experiment with inserting different amounts of money before printing tickets. - * Do you notice anything strange about the machine’s behavior? - * What happens if you insert too much money into the machine – do you receive any refund? - * What happens if you do not insert enough and then try to print a ticket? + * Do you notice anything strange about the machine’s behavior? + + ```java + It prints a ticket no matter how much money you have, and it always resets the balance back to zero after printing ticket. + ``` + + * What happens if you insert too much money into the machine – do you receive any refund? + + ```java + No refund is received. + ``` + + * What happens if you do not insert enough and then try to print a ticket? + + ```java + A ticket will print always, no matter how much money you have. + ``` + ### Exercise 2.4 * Try to obtain a good understanding of a ticket machine’s behavior by interacting with it on the object bench before we start looking at how the `TicketMachine` class is implemented in the next section. @@ -35,11 +54,28 @@ Work through all these exercises. You edit this file with your answers for these ### Exercise 2.5 * Create another ticket machine for tickets of a different price. * Buy a ticket from that machine. - * Does the printed ticket look different? + * Does the printed ticket look different? + + ```java + The balance and cost of ticket both reset. Ticket cost gets changed to whatever you set it to. + ``` + ### Exercise 2.6 * Write out what you think the outer wrappers of the `Student` and `LabClass` classes might look like – do not worry about the inner part. +```java +public class Student { + +} +``` + +```java +public class LabClass { + +} +``` + ### Exercise 2.7 Does it matter whether we write
`public class TicketMachine`
@@ -47,22 +83,60 @@ or
`class public TicketMachine`
in the outer wrapper of a class? +```java +Yes, it does matter. It should be + +public class TicketMachine +``` + * Edit the source of the `TicketMachine` class to make the change and then close the editor window. * Do you notice a change in the class diagram? - * What error message do you get when you now press the compile button? - * Do you think this message clearly explains what is wrong? + +```java +Yes, on the diagram the class TicketMachine is now unable to be compiled. It is criss-crossed in red. +``` + +* What error message do you get when you now press the compile button? + +```java +4 errors are found after attempting to compile. + * expected + * expected + * illegal start of expression + * invalid method declaration; return type required + ``` +* Do you think this message clearly explains what is wrong? + +```java +I do not think so because the errors point to other issues in the code, and not the fact that the class was not declared properly. +``` ### Exercise 2.8 * Check whether or not it is possible to leave out the word `public` from the outer wrapper of the `TicketMachine` class. +```java +Yes, it is possible. +``` + ### Exercise 2.9 * From your earlier experimentation with the ticket machine objects within BlueJ you can probably remember the names of some of the methods – `printTicket`, for instance. * Look at the class definition in Code 2.1 and use this knowledge, along with the additional information about ordering we have given you, to try to make a list of the names of the fields, constructors, and methods in the `TicketMachine` class. * Hint: There is only one constructor in the class. +```java +Fields: price, balance, total +Constructors: TicketMachine +Methods: getPrice(), getBalance(), insertMoney(), printTicket() +``` + + ### Exercise 2.10 * Do you notice any features of the constructor that make it significantly different from the other methods of the class? +```java +TicketMachine just sets initial values but does not return or compute any values. The other methods all return or compute values. +``` + ### Exercise 2.11 * What do you think is the type of each of the following fields? @@ -72,6 +146,12 @@ private Student representative; private Server host; ``` +```java +private int count; is type int +private Student representative; is type Student +private Server host; is type Server +``` + ### Exercise 2.12 * What are the names of the following fields? @@ -80,6 +160,11 @@ private boolean alive; private Person tutor; private Game game; ``` + +```java +alive, tutor, game +``` + ### Exercise 2.13 In the following field declaration from the TicketMachine class
@@ -91,6 +176,11 @@ does it matter which order the three words appear in? * Edit the `TicketMachine` class to try different orderings. After each change, close the editor. * Does the appearance of the class diagram after each change give you a clue as to whether or not other orderings are possible? + +```java +Yes, the diagrams turn red after clicking compile. This indicates that there are errors in the code and it will not work. Therefore, other orders are not possible. +``` + * Check by pressing the compile button to see if there is an error message. * Make sure that you reinstantiate the original version after your experiments! @@ -99,24 +189,45 @@ possible? * Once again, experiment via the editor. * The rule you will learn here is an important one, so be sure to remember it. +```java +Yes, it is always necessary to have a semicolon at the end of a field declaration. If you do not have one then Java does not know that it is the end of the declaration. +``` + ### Exercise 2.15 * Write in full the declaration for a field of type `int` whose name is `status`. +```java +private int status; +``` + ### Exercise 2.16 * To what class does the following constructor belong? ``` public Student(String name) ``` +```java +It belongs to Student. +``` + ### Exercise 2.17 * How many parameters does the following constructor have and what are their types? ``` public Book(String title, double price) ``` +```java +There are two parameters, title and price, and the their types are String and double. +``` + ### Exercise 2.18 * Can you guess what types some of the `Book` class’s fields might be? * Can you assume anything about the names of its fields? +```java +Some types might include int, String, char +You could possibly assume the names themselves based on what the type is. +``` + READ upto and INCLUDING section 2.15 of this chapter. diff --git a/TicketMachine.java b/TicketMachine.java index 630c4ea..00a84bc 100644 --- a/TicketMachine.java +++ b/TicketMachine.java @@ -9,7 +9,7 @@ * @author David J. Barnes and Michael Kolling * @version 2008.03.30 */ -public class TicketMachine +class TicketMachine { // The price of a ticket from this machine. private Integer price; diff --git a/bluej.pkg b/bluej.pkg index bf25784..bc5d3d3 100644 --- a/bluej.pkg +++ b/bluej.pkg @@ -1,32 +1,48 @@ #BlueJ package file -editor.fx.0.height=722 -editor.fx.0.width=800 -editor.fx.0.x=709 -editor.fx.0.y=113 -objectbench.height=101 -objectbench.width=461 +dependency1.from=TicketMachineTest +dependency1.to=TicketMachine +dependency1.type=UsesDependency +editor.fx.0.height=964 +editor.fx.0.width=951 +editor.fx.0.x=20 +editor.fx.0.y=69 +objectbench.height=100 +objectbench.width=611 package.divider.horizontal=0.6 -package.divider.vertical=0.8007380073800738 -package.editor.height=427 -package.editor.width=674 -package.editor.x=1067 -package.editor.y=119 -package.frame.height=600 -package.frame.width=800 -package.numDependencies=0 -package.numTargets=1 +package.divider.vertical=0.7220779220779221 +package.editor.height=255 +package.editor.width=518 +package.editor.x=60 +package.editor.y=1114 +package.frame.height=449 +package.frame.width=635 +package.numDependencies=1 +package.numTargets=3 package.showExtends=true package.showUses=true project.charset=UTF-8 -readme.height=58 +readme.height=60 readme.name=@README -readme.width=47 +readme.width=48 readme.x=10 readme.y=10 -target1.height=50 -target1.name=TicketMachine +target1.height=70 +target1.name=TicketMachineTest target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=80 -target1.y=50 +target1.type=UnitTestTargetJunit4 +target1.width=130 +target1.x=330 +target1.y=20 +target2.height=50 +target2.name=TicketMachine +target2.showInterface=false +target2.type=ClassTarget +target2.width=120 +target2.x=120 +target2.y=90 +target3.height=70 +target3.name=README.md +target3.type=TextTarget +target3.width=120 +target3.x=560 +target3.y=10 diff --git a/package.bluej b/package.bluej index bf25784..bc5d3d3 100644 --- a/package.bluej +++ b/package.bluej @@ -1,32 +1,48 @@ #BlueJ package file -editor.fx.0.height=722 -editor.fx.0.width=800 -editor.fx.0.x=709 -editor.fx.0.y=113 -objectbench.height=101 -objectbench.width=461 +dependency1.from=TicketMachineTest +dependency1.to=TicketMachine +dependency1.type=UsesDependency +editor.fx.0.height=964 +editor.fx.0.width=951 +editor.fx.0.x=20 +editor.fx.0.y=69 +objectbench.height=100 +objectbench.width=611 package.divider.horizontal=0.6 -package.divider.vertical=0.8007380073800738 -package.editor.height=427 -package.editor.width=674 -package.editor.x=1067 -package.editor.y=119 -package.frame.height=600 -package.frame.width=800 -package.numDependencies=0 -package.numTargets=1 +package.divider.vertical=0.7220779220779221 +package.editor.height=255 +package.editor.width=518 +package.editor.x=60 +package.editor.y=1114 +package.frame.height=449 +package.frame.width=635 +package.numDependencies=1 +package.numTargets=3 package.showExtends=true package.showUses=true project.charset=UTF-8 -readme.height=58 +readme.height=60 readme.name=@README -readme.width=47 +readme.width=48 readme.x=10 readme.y=10 -target1.height=50 -target1.name=TicketMachine +target1.height=70 +target1.name=TicketMachineTest target1.showInterface=false -target1.type=ClassTarget -target1.width=120 -target1.x=80 -target1.y=50 +target1.type=UnitTestTargetJunit4 +target1.width=130 +target1.x=330 +target1.y=20 +target2.height=50 +target2.name=TicketMachine +target2.showInterface=false +target2.type=ClassTarget +target2.width=120 +target2.x=120 +target2.y=90 +target3.height=70 +target3.name=README.md +target3.type=TextTarget +target3.width=120 +target3.x=560 +target3.y=10