270 likes | 284 Views
This lecture covers the fundamentals of variable types, expression evaluation, loops with for and while, and creating simple methods in Java. The code examples include modeling a ticket machine that issues flat-fare tickets and performs various operations such as accepting fare, calculating cumulative pay, issuing tickets, and providing price information.
E N D
O SOFTWARE AND PROGRAMMING 1 Lecture: MB33 7:30-9:00 (except 11&18.01.06) Lab: B43, MB321, MB536 6:00-7:30 (from 25.01.05) [each student must have obtained access to Birkbeck computing] Lab MB536: students whose family names fall in A-F Instructor: Mr Zheng Zhu LKL, tel. 020 7763 2115 E-mail: zheng@dcs.bbk.ac.uk Lab G03 Clore Centre: students whose family names fall in G-Ka Instructor: Mrs Jenny Hu SCSIS, room NG26, tel. 020 7631 6726 E-mail: jennychhu@yahoo.com Lab 12 Gordon Sq. 43: students whose family names fall in Ke -Y Instructor: Prof.Boris Mirkin SCSIS, room 111, tel. 020 7631 6746 E-mail: mirkin@dcs.bbk.ac.uk
Advice: setting a path to Java • Right-click on "My Computer", choose Properties, then Advanced tab; hit button for Environment Variables • Set a new variable called Path with the value "C:\Program Files\Java\jdk1.5.0_04\bin"
Test1 8/2/6 awareness Test1 will be carried out in MB33 during the lecture time (not lab time) from 7:30, 8/2/06 Subjects: • Variable: type, declaration, initialisation • Expression: arithmetic, Boolean • Loop for • Loop while • if( )… else if( ) ... else • Simple method
What we want of a Ticket Machine TicketMachine code: to model a ticket machine that issues flat-fare tickets. The functionality: - accepting fare - calculating the amount to pay back - calculating the cumulative pay • issuing tickets • informing of the price and accumulated pay Instances may have different prices
Coding Ticket Machine Principle: EACH function should be done with a specific variable/method Functions: - differing instances (constructor) - different pricing (var: price) - accepting fare (var: balance) • calculating the cumulative pay (var: total) • calculating the money back (diff = balance-price) • issuing tickets (method for printing a ticket) • informing of the price and accumulated pay (methods for each)
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
Ticket Machine (2) // TicketMachine’s continuation public void insertMoney(int amount) { if(amount > 0) balance = balance + amount; else { System.out.println("Use a positive amount: " + amount); } } public int refundBalance() { int amountToRefund; amountToRefund = balance; balance = 0; return amountToRefund; } // continued on the next page
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
Example of a while loop: Structure: initialisation; while(test){…, update, …} int a=1; int b=6; while(a<=b){ a=a+2; b=b-2; System.out.println(“a = ” + a + “ and b = ” + b); } 1. What this loop does? 2. Can it be rewritten in the forformat? Homework
What the while loop does: int a=1; int b=6; while(a<=b){ a=a+2; b=b-2; System.out.println(“a = ” + a + “ and b = ” + b); } This loop prints a = 3 and b = 4 a = 5 and b = 2
Double loop (1) class AddTable { public static void main(String[ ] args){ int sum; for (int ite1=1;ite1<3; ite1++) {//loop1 for (int ite2=1;ite2<5; ite2++) {//loop2 sum=ite1+ite2; System.out.print(sum +" ");}//loop2 System.out.println();}//loop1 } //method main ends } //class ends
Double loop (2) This prints 2 3 4 5 3 4 5 6 Why? A better printing ? Such as: Addition Table + 1 2 3 4 1 2 3 4 5 2 3 4 5 6
Double loop (3) class AddTable { public static void main (String[] args) {int sum; for (int i1=1;i1<3; i1++){ System.out.print(i1 + " ! "); for (int i2=1;i2<5; i2++){ sum=i1+i2; System.out.print(sum +" ");} System.out.println();} } }
Double loop (4): with method class AddTableMeth { public static void main (String[] args) { PrintTable(2,4); }\\end main public static PrinTable(int rowsize, int columnsize){ for (int i1=1;i1<rowsize+1; i1++){ System.out.print(i1 + " ! "); for (int i2=1;i2<columnsize+1; i2++){ sum=i1+i2; System.out.print(sum +" ");} System.out.println();} } }\\end class
Double loop (5) produces 1! 2 3 4 5 2! 3 4 5 6 3! 4 5 6 7 Q: How to make it look better? (See printing method in TicketMachine.) Q: How to modify it to other ranges? Q: Make a MULTIPLICATION TABLE?
Java branching structure : if( ) … else if( ) … else if( ) … else if(BooleanExpr1) Statement1; (e.g. Tax=2;) else if(BooleanExpr2) Statement2; (e.g. Tax=18;) else Statement3; (e.g. Tax=7;) • Note: No (Boolean Expression) at else
Example of branching(1) Problem: calculate income tax Algorithm (Input: Income, Output: Tax): When the salary is less than 10000, there is no tax. The tax is 15% on the amount earned over 10000 up to 50000. Any money earned over 50000 are taxed at 40%, that is, they pay 6000, the tax at 50000, plus the 40% added from the earnings over 50000.
Example of branching(2) If()… : int Salary; int Tax=0; TextIO.putln("Input your salary "); Salary=TextIO.getInt(); //TextIO – a class to be // put into the class’ directory if ((Salary > 10000)&&(Salary<=50000)) Tax=(Salary-10000)*15/100; if (Salary>50000) Tax=(Salary-50000)*40/100 + 6000;
Example of branching(3) If()…else if()…else (preferable): int Salary; int Tax; if (Salary<=10000) Tax=0; else if (Salary<=50000) Tax=(Salary-10000)*15/100; else Tax=(Salary-50000)*40/100 + 6000; • Q: What this would produce for Salary=15777?
Method for Tax calculation Method TC with input/parameter – Salary; output - Tax public float TC(int Salary) { float Tax; if (Salary<=10000) Tax=0; else if (Salary<=50000) Tax=(Salary-10000)*15/100; else Tax=(Salary-50000)*40/100 + 6000; return Tax;} Application: int mywages=15777; float mytax=TC(mywages); // would assign 866.55 to mytax
Input/Output TextIO class TextIO.java, added to the directory that contains your class, eases input of data from the keyboard To input an integer: int UsInput = TextIO.getInt(); Computer will wait for the user to type in an integer value to UsInput.
Input/Output TextIO class (2) public class PrintSquare { public static void main(String[] args) { int uInput; // the number to be input by the user int Squared; // the userInput, multiplied by itself System.out.print("Please type a number: "); uInput = TextIO.getInt(); Squared = uInputuInput; //why product? System.out.print("The square is "+Squared); }// end of main() } //end of class PrintSquare
Input/Output TextIO class (3) Other TextIO methods: b = TextIO.getByte(); // value read is a byte i = TextIO.getShort(); // value read is a short j = TextIO.getInt(); // value read is an int k = TextIO.getLong(); // value read is a long x = TextIO.getFloat(); // value read is a float y = TextIO.getDouble(); // value read is a double a = TextIO.getBoolean(); // value read is a boolean c = TextIO.getChar(); // value read is a char w = TextIO.getWord(); // value read is a String s = TextIO.getln(); // value read is a String
Input/Output in Java The TextIO class contains static member methods TextIO.put() and TextIO.putln(), the same as System.out.print() and System.out.println(). TextIO can only be used in a program if TextIO is available to that program. It is not built into Java. From Java 1.5.0 version on, there is a similar class in Systems.in: Scanner
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
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 (ik=0; ik<num; ik++) System.out.print(‘.’); System.out.println(); } \\end of main } \\end of class
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