diff --git a/README.md b/README.md index ee11f2c..f94eeb1 100644 --- a/README.md +++ b/README.md @@ -13,29 +13,42 @@ There is 35 pages of reading and exercises in the chapter. Work through all these exercises. You edit this file with your answers for these exercises. ### Exercise 2.1 -* Create a TicketMachine object on the object bench. +* Create a TicketMachine object on the object bench. * Upon viewing its methods, `getBalance`, `getPrice`, `insertMoney`, `printTicket`. * Use `getPrice` method to view the value of the price of the tickets that was set when this object was created. * Use `insertMoney` method to simulate inserting an amount of money into the machine. * Use `getBalance` to check that the machine has a record of the amount inserted. + * 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? + * The value returned after printing the ticket ticketMa1.getBalance() returned = 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? - -### Exercise 2.4 + * Do you notice anything strange about the machine’s behavior? + + * Upon printing the ticket, when checking balance it will show zero. However on the printTicket: String will show ticket price and total inserted. + + * What happens if you insert too much money into the machine – do you receive any refund? + + * Similar to inserting the correct amount, Print ticket will show price and total inserted. No refund at the moment. + + * What happens if you do not insert enough and then try to print a ticket? + + * String for printTicket will show the total inserted and price. Balance will reset to zero. + +### Exercise 2.4 - **This is where we start again** * 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. ### 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? + + * No, it reminds the same after duplicating the orginial TicketMachine ### 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. @@ -43,42 +56,77 @@ Work through all these exercises. You edit this file with your answers for these ### Exercise 2.7 Does it matter whether we write
`public class TicketMachine`
-or
+or
`class public TicketMachine`
in the outer wrapper of a class? + * If changed to class public TicketMachine - all the other classes must be changed to match the new class public vs. public class * 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? + * Do you notice a change in the class diagram? + + * The appearance of red/greyed out slash marks are seen on the 'newTicketMachine' class. + * What error message do you get when you now press the compile button? - * Do you think this message clearly explains what is wrong? + + * The source code screen opens up, and the edited line is highlighted, bottom of the screen, an Error(s) found in class is seen. + + * Do you think this message clearly explains what is wrong? + + * Yes, if you hover over the error a message appears for reasons why the error occured. + ### Exercise 2.8 -* Check whether or not it is possible to leave out the word `public` from the outer wrapper of the `TicketMachine` class. +* Check whether or not it is possible to leave out the word `public` from the outer wrapper of the `TicketMachine` class. + +* It is possible to leave out the word 'public' from the outer wrapping. No error code created when compiled ### 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. + + * Field - private: Int price; int balance; int total; int tickeNumber + * Constructors - price =ticketCost, balance, total, ticketNumber + * Methods - return ticketNumber; + * Hint: There is only one constructor in the class. ### Exercise 2.10 * Do you notice any features of the constructor that make it significantly different from the other methods of the class? +* Constructor sets the rules for the price, balance, total, ticketNumber + ### Exercise 2.11 * What do you think is the type of each of the following fields? ```java -private int count; -private Student representative; -private Server host; +private int count; + +* int + +private Student representative; + +* Student + +private Server host; + +* Server ``` ### Exercise 2.12 * What are the names of the following fields? ```java -private boolean alive; -private Person tutor; -private Game game; +private boolean alive; + +* boolean alive; + +private Person tutor; + +* Person tutor; + +private Game game; + +* Game game ``` ### Exercise 2.13 @@ -88,35 +136,55 @@ In the following field declaration from the TicketMachine class
private int price; ``` does it matter which order the three words appear in? + +* Yes, Private denotes whether the field will be private to the specific class or to all the class, int is the class designator, and price is the variable. + * 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? +possible? + +* No, Java does not care + * 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! ### Exercise 2.14 -* Is it always necessary to have a semicolon at the end of a field declaration? +* Is it always necessary to have a semicolon at the end of a field declaration? + +* Yes, becaus a semicolon denotes in Java an end of the declaration. + * Once again, experiment via the editor. * The rule you will learn here is an important one, so be sure to remember it. ### Exercise 2.15 * Write in full the declaration for a field of type `int` whose name is `status`. +* private int status ### Exercise 2.16 * To what class does the following constructor belong? ``` public Student(String name) + +* Student class ``` ### Exercise 2.17 * How many parameters does the following constructor have and what are their types? ``` public Book(String title, double price) + +* the parameteers = 2; string title and double price + ``` ### Exercise 2.18 * Can you guess what types some of the `Book` class’s fields might be? + +* Private String Author - Private String title + * Can you assume anything about the names of its fields? + +* it is a private and applicable to the specific scope of the class READ upto and INCLUDING section 2.15 of this chapter. diff --git a/bluej.pkg b/bluej.pkg index bf25784..2c7246d 100644 --- a/bluej.pkg +++ b/bluej.pkg @@ -1,32 +1,55 @@ #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=729 +editor.fx.0.width=861 +editor.fx.0.x=944 +editor.fx.0.y=-890 +objectbench.height=100 +objectbench.width=776 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.divider.vertical=0.8003731343283582 +package.editor.height=422 +package.editor.width=683 +package.editor.x=1044 +package.editor.y=0 package.frame.height=600 package.frame.width=800 -package.numDependencies=0 -package.numTargets=1 +package.numDependencies=1 +package.numTargets=4 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=140 +target1.y=110 +target2.height=50 +target2.name=TicketMachine +target2.showInterface=false +target2.type=ClassTarget +target2.width=120 +target2.x=80 +target2.y=50 +target3.height=70 +target3.name=newTicketMachine +target3.showInterface=false +target3.type=ClassTarget +target3.width=160 +target3.x=380 +target3.y=70 +target4.height=70 +target4.name=README.md +target4.type=TextTarget +target4.width=120 +target4.x=10 +target4.y=110 diff --git a/newTicketMachine.java b/newTicketMachine.java new file mode 100644 index 0000000..1add568 --- /dev/null +++ b/newTicketMachine.java @@ -0,0 +1,100 @@ +/** + * newTicketMachine models a naive ticket machine that issues + * flat-fare tickets. + * The price of a ticket is specified via the constructor. + * It is a naive machine in the sense that it trusts its users + * to insert enough money before trying to print a ticket. + * It also assumes that users enter sensible amounts. + * + * @author David J. Barnes and Michael Kolling + * @version 2008.03.30 + */ +public class newTicketMachine +{ + // The price of a ticket from this machine. + private Integer price; + // The amount of money entered by a customer so far. + private Integer balance; + // The total amount of money collected by this machine. + private Integer total; + // The number of tickets printed. + private Integer ticketNumber; + + /** + * Create a machine that issues tickets of the given price. + * Note that the price must be greater than zero, and there + * are no checks to ensure this. + */ + public newTicketMachine(Integer ticketCost) + { + price = ticketCost; + balance = 0; + total = 0; + ticketNumber = 0; + } + + /** + * Return the price of a ticket. + */ + public Integer getPrice() + { + return price; + } + + /** + * Return ticketNumber. + * (Increments on each print.) + */ + public Integer getTicketNumber() + { + return ticketNumber; + } + + + + /** + * Return the amount of money already inserted for the + * next ticket. + */ + public Integer getBalance() + { + return balance; + } + + /** + * Receive an amount of money in cents from a customer. + */ + public Integer insertMoney(Integer amount) + { + balance = balance + amount; + return balance; + } + + public Integer calculateTotal(){ + total = balance + total; + return total; + } + + public Integer incrementTicketNumber(){ + ticketNumber++; + return ticketNumber; + } + + + /** + * Print a ticket. + * Update the total collected and + * reduce the balance to zero. + */ + public String printTicket() + { + //Increment the number of tickets printed + incrementTicketNumber(); + // Update the total collected with the balance. + total = total + balance; + // Clear the balance. + balance = 0; + + return "Ticket price: " + price + " cents. " + "Your total is " + total + "."; + } +} diff --git a/package.bluej b/package.bluej index bf25784..2c7246d 100644 --- a/package.bluej +++ b/package.bluej @@ -1,32 +1,55 @@ #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=729 +editor.fx.0.width=861 +editor.fx.0.x=944 +editor.fx.0.y=-890 +objectbench.height=100 +objectbench.width=776 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.divider.vertical=0.8003731343283582 +package.editor.height=422 +package.editor.width=683 +package.editor.x=1044 +package.editor.y=0 package.frame.height=600 package.frame.width=800 -package.numDependencies=0 -package.numTargets=1 +package.numDependencies=1 +package.numTargets=4 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=140 +target1.y=110 +target2.height=50 +target2.name=TicketMachine +target2.showInterface=false +target2.type=ClassTarget +target2.width=120 +target2.x=80 +target2.y=50 +target3.height=70 +target3.name=newTicketMachine +target3.showInterface=false +target3.type=ClassTarget +target3.width=160 +target3.x=380 +target3.y=70 +target4.height=70 +target4.name=README.md +target4.type=TextTarget +target4.width=120 +target4.x=10 +target4.y=110