SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 -...

26
SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald Street Tel.: 020 7763 2114 E-mail: [email protected]

Transcript of SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 -...

Page 1: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

SOFTWARE AND PROGRAMMING 1

In-class open-book TEST1 on 6/02

Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20)

Room 103.2 London Knowledge Lab 23-29 Emerald StreetTel.: 020 7763 2114 E-mail: [email protected]

Page 2: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

2

Test1 6/2/8 awareness

Open-book in-class Test1 6/2/8 subjects:

• Variable: type, declaration, initialisation• Expression• Loop for• Loop while• if( )… else if( ) ... else• Method

Page 3: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

3

Contents

• Ticket Machine without and with a menu or main method

• Method: mutator, accessor• Constructor• Calling a method

• Working over a menu with if/else and while

• Using TextIO/Scanner for input

Page 4: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

4

Ticket MachineImitates issuing flat-rate tickets• Three variables needed:

price – for ticket price balance – for the user’s moneytotal – for money received from

customers• Three assessor methods for getting each

of the variables• Three mutator methods for

-entering customer’s money-issuing a ticket-getting refunded

Page 5: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

5

Blue-J Ticket Machine (1)/* * TicketMachine models a ticket machine that issues * flat-fare tickets. */public class TicketMachine{private int price;private int balance;private int total;

public TicketMachine(int ticketCost) //constructor { price = ticketCost; balance = 0; total = 0; } public int getPrice() { return price; } public int getBalance() { return balance; }public int getTotal() { return total; } // see next page for continuation

Page 6: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

6

Blue-J Ticket Machine (2)// TicketMachine’s continuationpublic void insertMoney(int amount) { if(amount > 0) balance = balance + amount; else { System.out.println(“This is not positive "+

amount); } } public int refundBalance() { int amountToRefund; amountToRefund = balance; balance = 0; return amountToRefund; }// continued on the next page

Page 7: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

7

Blue-J Ticket Machine (3)// TicketMachine’s end public void printTicket() { if(balance >= price) { // Simulate the printing of a ticket. System.out.println("##################"); System.out.println("# The BlueJ Line"); System.out.println("# Ticket"); System.out.println("# " + price + " pence."); System.out.println("##################"); System.out.println();

total = total + price; // Update the total balance = balance - price; // Update the balance } else { System.out.println("You must insert at least: " + (price - balance) + " more pence."); } } }//end of class

Page 8: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

8

Passing data via parameters

Page 9: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

9

A comment

I consider printTicket()method as somewhat inconsistent:

printing (an accessing activity) is mixed up with

changing the balance and total (mutating activities)

Any suggestions?

Page 10: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

10

Accessor methods

• Accessors provide information about the state of an object.

• Methods have a structure consisting of a header and a body.

• The header defines the method’s signature. public int getPrice()

• The body encloses the method’s statements.

Page 11: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

11

Accessor methods

public int getPrice(){ return price;}

return typemethod name

parameter list (empty)

start and end of method body (block)

return statement

visibility modifier

Page 12: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

12

Mutator methods

• Have a similar method structure: header and body.

• Used to mutate (i.e. change) an object’s state.

• Achieved through changing the value of one or more fields.– Typically contain assignment statements.– Typically receive parameters.

Page 13: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

13

Mutator methods

public void insertMoney(int amount){ balance = balance + amount;}

return type (void)

method name parameter

visibility modifier

assignment statementfield being changed

Page 14: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

14

Questions

• How many methods are in TicketMachine? - five

• If there is any syntactic difference between a method and constructor? – two: absence of the output type, compulsory name

• Which of the methods are accessors and which are mutators? -

Two in the beginning are accessors, three in the end are mutators

Page 15: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

15

Blue-J Ticket Machine: a review

Shortcomings:• No main method – cannot be used in JDK

• Input only with BlueJ capabilities, not with JDK

• Methods not ordered – refund may occur before a ticket has been issued

- can be addressed by organising a dialog or menu

Page 16: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

16

Organising a menu

//--- ‘menu’ method for choosing action----------- public static int menu() {

TextIO.putln();TextIO.putln("Please enter a number: ");TextIO.putln(" 0 - to quit ");TextIO.putln(" 1 - to get a ticket price ");TextIO.putln(" 2 - to put money and get a ticket ");TextIO.putln(" 3 - to get refunded ");TextIO.putln(" 4 - to get statistics ");int action=TextIO.getInt();return action; }

Page 17: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

17

Main method using menu: right?

• public static void main(String[ ] args){• int MeItem=1;• while (MeItem!=0){• MeItem=menu();// a method• if (MeItem==1){• int pp=getPrice(); // a method• System.out.println("The ticket price is "+pp+"

pence ");}• else if (MeItem==2) {• System.out.println("Please key in the money inserted,

in pence");• int money.insert=TextIO.getInt();• insertMoney(money_insert);• printTicket();}• else if (MeItem==3) {• int refund=refundBalance();• System.out.println("Please take your refund " +

refund);}• else• {int tt=getTotal();• int bb=getBalance();• System.out.println("The total for tickets: "+tt);}• }//end of while for choosing action• } //end of main

Page 18: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

18

Main method using menu: WRONG!

•WHY?•There are some deficiencies in the program:

no difference between option 4 and !(1 | 2 | 3) – but this wouldn’t make the class fail

•Because main method is static, but other methods and variables are not

•A Java Commandment: You shalt not utilise non static items in a static method!

•What to do? Either– Make other methods and variables static too; this

works but may be in odds with flexibility considerations

– Introduce an instance of the class into main method – make the constructor working – and use all methods and variables from the instance

Page 19: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

19

Main method using menu: Right (I)

public static void main(String[ ] args){System.out.println("Please enter a ticket price "); int pi=TextIO.getInt();TM atm=new TM(pi);int MeItem=1;while (MeItem!=0){

MeItem=menu();// a methodif (MeItem==1){

int pp=atm.getPrice(); // a methodSystem.out.println("Ticket price is

"+pp);}

Page 20: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

20

Main method using menu: Right (II)

else if (MeItem==2) {System.out.println(“Key in the money inserted in

pence"); int money_insert=TextIO.getInt();

atm.insertMoney(money_insert); atm.printTicket();}

else if (MeItem==3) { int refund=atm.refundBalance(); System.out.println("Please take your refund " + refund);}

else {int tt=atm.getTotal(); int bb=atm.getBalance(); System.out.println("The total for tickets: "+tt);}

}//end of loop while for choosing action} //end of main

Page 21: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

21

Loop for: reminder I

General form:• for(CounterInit; Test; CounterUpdate)

{ }Three parts:

for – name of the loop( ) – control of the loop{ } – computations at each loop’s iteration

Needs to be remembered:Process of computation is controlled in ( ) – it is only from here an exit from the loop is possible (at Test=False)

Computations are performed in { }; when finished, the process goes back to ( )

Page 22: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

22

Loop for: reminder IITask: Print integers from 0 to 10 in one line

• for(int ii=0; ii<=10; ii++){System.out.print(ii + “ ”); }

If one wants change the number 10 to 15?

• for(int ii=0; ii<=15; ii++){System.out.print(ii + “ ”); }

Or, more flexible,

• int lim =15;• for(int ii=0; ii<=lim; ii++)

{System.out.print(ii + “ ”); }

Page 23: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

23

Loop for: reminder IIIOr, even more flexible, with a method

• int printint(int lim){• for(int ii=0; ii<=lim; ii++)

{System.out.print(ii + “ ”); }} //end of method printint printint(15); //calling method at lim=15

Q: Can you find anything wrong in the method printint? (A: (i) int output type, (ii) should put System.out.println(); in the end)Q: How to modify this if I want 0 5 10 15 … 95 100 printed? (A: Think, or if you don’t want to, use filtering condition ii%5==0)

Page 24: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

24

Input with Scanner class(1)From Java 1.5.0 version on, there is

a similar class in System.in.Scanner(System.in): - import the java.util package in a

line preceding the class, - then declare an instance of

Scanner and - then use it for prompting the user

to enter data (of a specified data type, preferably int or double) from keyboard

Page 25: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

25

Input with Scanner class (2)import java.util.*class PrintDot{ int num=0; public static void main(String[ ] args){ Scanner scap = new Scanner(System.in); System.out.println(“How many dots to print? “); num=scap.nextInt();

for (int ik=0; ik<num; ik++) System.out.print(‘.’); System.out.println(); } \\end of main } \\end of class

Page 26: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: Ms Mihaela Cocea (from 6.00 - 7.20) Room 103.2 London Knowledge Lab 23-29 Emerald.

26

Using method with Scanner import java.util.*class PrintDot{ int number=0; public static void main(String[ ] args){ Scanner scap = new Scanner(System.in); System.out.println(“How many ampersands to print?

“); number=scap.nextInt(); ppp(number); } \\end of main

void ppp(nnn) { for (ik=0; ik<nnn; ik++) System.out.print(‘&’); System.out.println(); } \\end of ppp} \\end of class