CS110 Lecture 10 Thursday, February 26 2004 • Announcements – hw4 due tonight – Exam next Tuesday (sample posted) • Agenda – – – – – questions what’s on the exam? collections (Chapter 4) arrays better Banks and BankAccounts Lecture 10 1 Exam preview • Based on course work so far (JOI Chapters 1,2,3) • Given source code Foo.java to read: – – – – what does java Foo do? find tokens, keywords, identifiers, messages … comment on programming conventions draw a box-and-arrow picture • Write simple code using if/else, while, for • Sample posted on course web page Lecture 10 2 Vocabulary java, token, keyword, identifier, convention, API, message, method, int, double, boolean, if, else, while, for, declaration, delegation, variable, class, instance, field, source code, static, scope, client, comment, javadoc, compile, constructor, final, flow control, object, main, string, syntax, semantics, this, true, false, unit test, self documenting test, new, null, void, public, private, pseudocode, … Lecture 10 3 Applications • • • • • Bank, BankAccount LinearEquation, Temperatures, PhoneBill IntArithmetic, DoubleArithmetic, Exponentiate TextFile HLine, Box, Screen, VLine, Frame, … Lecture 10 4 hw4 - Exponentiate • needs just main • pseudocode – – – – – create a Terminal get base and exponent from user create any BigIntegers you need send a message to do the computation print the result Lecture 10 5 Collections • More programs manipulate data than do arithmetic – Library catalog manages a collection of books – Registrar maintains a database of student records – EStore has list of Items in Warehouse and in ShoppingCart – Bank deals with a list of BankAccounts – Screen manages a set of pixels – Windows folder holds files (and other folders) • … list, set, database, group, collection, container ... Lecture 10 6 Collections • A Collection is an object that stores things • Collection API must provide ways to – make an empty container (constructor) – put things in: put, insert, add, store, ... – know what’s there: • get, retrieve, find, lookup, ... • loop on contents – throw things out: delete, remove, kill, ... • Java provides array, List, Map, Set Lecture 10 7 A better Bank (Version 4)... • Maintains a list of BankAccounts • Allows banker to create new accounts while the Bank is open • Keeps track of the total balance of all the accounts in it, and of the total number of transactions performed by its accounts Lecture 10 8 Array • Simplest Java object for managing a list • array syntax uses square brackets [] several ways • Bank.java (version 4) uses an array • Declare field accountList of type “array of BankAccounts” (line 32) private BankAccount[] accountList ; • Create the array, ready to hold 3 Items (60) accountList = new BankAccount[NUM_ACCOUNTS]; Lecture 10 9 An array for 3 BankAccounts // fill array on lines 66-68 accountList [0] = new BA( 0, this); accountList [1] = new BA(100, this); accountList [2] = new BA(200, this); • Improved BankAccount object has a field to hold a reference to the Bank it belongs to (more later) Lecture 10 10 boxes and arrows for arrays Bank aList BA[]; declares account BankAccount[] array of BA (line 32) List: null aList = new BA[3]; creates array object (60) Bank account List: BankAccount[] Bank account List: 0: null 1: null 2: null BankAccount[] aList[0] =new BA(); fills array object (66-) BankAccount[] 0: 1: 2: BankAccount[] Lecture 10 BankAccount BankAccount BankAccount 11 Seeing what’s in an array BA acct = accountList[1]; atm.println(“Account 1 balance: ” + acct.getBalance()); prints Account 1 balance: 100 Lecture 10 12 looping over an array // lines 211-214 in report method for (int i = 0; i < NUM_ACCOUNTS; i++) { terminal.println( i + “\t” + accountList[i].getBalance() + … ) } • accountList[i] is (a reference to) the Object at position i. • send a getBalance message to each account in the Bank in succession • prints 0 \t is tab 0 x 1 100 x 2 200 x Lecture 10 13 array summary • declare: Type[ ] myArray; // Type is class name, // or primitive • create: myArray = new Type[size]; // int size • put: myArray[position] = …; // int position • get: Type x = myArray[position]; myArray[position].message(); • length: myArray.length; // final public field • range: 0,1,…, myArray.length-1 read short self documenting program Array.java Lecture 10 14 arrays are Objects • Created with new • Size is determined at creation time but not at declaration time • The square brackets provide the special syntax for sending an array a message • myArray[i] refers to the value stored at index i (which must be an integer) • Stored values may be primitive (in the box) or a reference to an object (an arrow) but all values must have the same type Lecture 10 15 Improved BankAccount • Private fields (all have getter methods) int balance; int transactionCount; Bank issuingBank; • Constructor public BankAccount(int initialBalance, Bank issuingBank) { this.issuingBank = issuingBank; this.deposit(initialBalance); } Lecture 10 16 Command line arguments in Java public static void main(String[] args) • args is a parameter for the main method • The declaration says it’s an array of String objects • Its contents are the words on the command line after java ClassName • Argument array can have any name you wish – args is conventional – old C programmers may call it argv Lecture 10 17 Command line arguments in Java • class CommandLineArgsDemo public static void main( String[] args ) { for (int i = 0; i < args.length; i++){ System.out.println('|'+args[i]+'|'); } } • %> java CLID message is “hello, world” |message| |is| |hello, world| • Experiment with %> java Bank -e Lecture 10 18 Improved Bank • banker commands – create new account – report on totals – deal with a customer • • • • deposit withdraw get balance transfer Lecture 10 19 Bank and BankAccount cooperate public int deposit(int amount) { this.incrementBalance( amount); this.countTransaction(); return amount ; } public void incrementBalance(int amount) { balance += amount; this.getIssuingBank(). incrementBalance( amount ); } this BankAccount asks the Bank it is in to update its own balance field Lecture 10 20 BankAccount int balance: Bank bankName: atm: String “River Bank” Terminal Terminal int balance: 600 transaction int Count: 9 account BankAccount[] List: 100 transaction int 2 Count: issuing Bank Bank: BankAccount int balance: BankAccount[] 0: 1: 200 transaction int 3 Count: issuing Bank Bank: 2: BankAccount int balance: A Bank object and its fields Lecture 10 300 transaction int 4 Count: issuing Bank 21 Bank: