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

24
SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: (from 6.00 - 7.20) Ms Mihaela Cocea 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: (from 6.00 - 7.20) Ms Mihaela...

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

SOFTWARE AND PROGRAMMING 1

In-class open-book TEST1 on 6/02

Lab SH131: (from 6.00 - 7.20)

Ms Mihaela Cocea 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: (from 6.00 - 7.20) Ms Mihaela Cocea 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: (from 6.00 - 7.20) Ms Mihaela Cocea Room 103.2 London Knowledge Lab 23-29 Emerald.

3

Contents

• Ticket Machine with a menu and main method

• Working over a menu: –while and

–if/else if/else• Using TextIO/Scanner for input• Constructor• Static and instance variables

Page 4: SOFTWARE AND PROGRAMMING 1 In-class open-book TEST1 on 6/02 Lab SH131: (from 6.00 - 7.20) Ms Mihaela Cocea 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-printing/issuing a ticket-getting refunded

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

5

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

6

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

7

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

8

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

9

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

10

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

11

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

12

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

13

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

14

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

15

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

Two errors in this code: in lines 1 and 3. Please guess! Answer: no ; and non-static num

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

16

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

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

static void ppp(int nnn) { for (ik=0; ik<nnn; ik++) System.out.print(‘&’); System.out.println(); } //end of ppp} //end of class - some errors are here too! Try to find

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

17

Constructor• Constructor is a special method that

– Has the same name as the class– No return type (nor “return”)– Is called with modifier “new”

• to reserve a memory space for an object of class type (an instance)

• List of parameters, as well as the block, can be user defined

• The constructor with no parameters is available by default (like Const(){ }; )

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

18

Static and instance variables

Static variable: belongs to its class, and it is shared by all class instances, with the same value

Instance variable: a class variable without the “static” modifier, is shared by all class instances, but its values can differ in different instances

Local variable: is created within a method or instance in a { } block. Its scope is limited within the block.

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

19

Example (1)public class TesNum { int instVar = 1; static int statVar = 10;TesNum() { System.out.println("test: " + instVar +

" and " + statVar); instVar = 7; statVar = 5; } \\ constructor

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

20

Example(2)public static void main(String[] args) { TesNum alpha1 = new TesNum(); alpha1.instVar = 3; alpha1.statVar = 6; //syn. to: TesNum.statVar

= 6;

TesNum alpha2 = new TesNum(); System.out.println("inst: " + alpha1.instVar + "

and " + alpha2.instVar); System.out.println("stat: " + alpha1.statVar + "

and " + alpha2.statVar);//System.out.print("mix: " + instVar + " and " + statVar);

wrong

}//end of main

}//end of class

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

21

What’s going on in TesNum

instVar statVar 1. With the class:

1 (in class) 102. At the constructor in class (virtual):

7 53. After alpha1:Constructor prints: 1 and 10

3 (within alpha1) 64. After alpha2:Constructorprints: 1 and 6

7 (within alpha2) 55. Method main prints: 3 and 7

5 and 5

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

22

A method added:

public int SS(int a){ int b=instVar; int sum=0; if (a>b){ //swap a and b

int c=b; b=a; a=c;} for(int i=a;i<=b;i++) sum=sum+i; return sum; }// computes the sum of integers from a to b

int b1=alpha1.SS(statVar);int b2=alpha2.SS(statVar);System.out.println("sum : " + b1 + " and " +

b2);

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

23

Sums to be printed

From alpha1: a=5, b=3The sum: 3+4+5=12, that is,

b1=12From alpha2: a=5, b=7

The sum: 5+6+7=18, that is, b2=18

The print:sum: 12 and 18

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

24

References to object variables and methods

Examples from TesNum

alpha1.statVar

alpha2.instVar

TesNum.statVar

from TesNMod

alpha1.SS(statVar)