1 / 26

Programming Test on Variable Types, Expressions, Loops, and Methods

In this open-book in-class test, students will be assessed on their understanding and application of variable types, expressions, loops (for and while), if-else statements, and methods in Java programming. The test will cover topics such as variable declaration, initialization, mutator and accessor methods, constructors, and calling methods. The test will also assess students' ability to work with a menu using if/else and while statements, as well as their proficiency in using TextIO/Scanner for input. The test will involve implementing a ticket machine program that issues flat-rate tickets.

tobler
Download Presentation

Programming Test on Variable Types, Expressions, Loops, and Methods

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 Street Tel.: 020 7763 2114 E-mail: mihaela@dcs.bbk.ac.uk

  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

  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

  4. Ticket Machine Imitates issuing flat-rate tickets • Three variables needed: price – for ticket price balance – for the user’s money total – 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 -gettingrefunded

  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

  6. Blue-J Ticket Machine (2) // TicketMachine’s continuation public 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

  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

  8. Passing data via parameters

  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?

  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.

  11. Accessor methods return type visibility modifier method name parameter list (empty) public int getPrice() { return price; } return statement start and end of method body (block)

  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.

  13. Mutator methods return type (void) visibility modifier method name parameter public void insertMoney(int amount) { balance = balance + amount; } field being changed assignment statement

  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

  15. Blue-J Ticket Machine: areview 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

  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; }

  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

  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

  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 method if (MeItem==1){ int pp=atm.getPrice(); // a method System.out.println("Ticket price is "+pp);}

  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

  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 ( )

  22. Loop for: reminder II Task: 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 + “ ”); }

  23. Loop for: reminder III Or, 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 want0 5 10 15 … 95 100printed? (A: Think, or if you don’t want to, use filtering condition ii%5==0)

  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

  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

  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

More Related