480 likes | 639 Views
SOFTWARE AND PROGRAMMING 1. (3) to formatting all tables. Lecture 2, 2011 Instructor: Prof. Boris Mirkin DCSIS, room 744, tel. 020 7631 6746 E-mail: mirkin@dcs.bbk.ac.uk Labs: from 26/1, 7.30 pm, in Room B12, UCL Cruciform Building Logins will be given to those attending
E N D
SOFTWARE AND PROGRAMMING 1 (3) to formatting all tables. Lecture 2, 2011 Instructor: Prof. Boris Mirkin DCSIS, room 744, tel. 020 7631 6746 E-mail: mirkin@dcs.bbk.ac.uk Labs: from 26/1, 7.30 pm, in Room B12, UCL Cruciform Building Logins will be given to those attending Course Assistant: Lab/WebCT/Tests/Assignments: Mr Martin O’Shea E-mail: martin@dcs.bbk.ac.uk
Webpages Course web page at BlackBoard: http://www.ble. ac.uk Please check it regularly. It will be used for announcements and assignments. Another page, at an open-to-all web-site, functions with relevant materials too: www.dcs.bbk.ac.uk/~mirkin/sp109
Concepts to keep in mind • Compiler (javac.exe) and Interpreter (java.exe), should be on system’s path • JDK and BlueJ for running Java • Class (template) and Object (its instantiation); every Java program must be a class • Variable and its type; primitive types • Method (input-to-output operation) and its Parameters (inputs - with their types at method’s declaration)
Concepts for tonight • Loops for, while (Have been taught 12/1, but are in this note set) • Expressions • Choice structure if/elseif/else • Method • Strings • Math and random • Input • Using TextIO class • Using Scanner
Type in Java Next few slides cover some material on unifying data types and expressions that was talked about at the previous lecture
Unifying type Look at A=6.0+5 What type of A can be? Can A be Integer? No way. A most senior type! Unifying type: float or double
Type casting The unifying type can be overridden by explicitly stating a type cast: • Place the desired type result in parentheses followed by the variable or constant to be cast (int) 6.0+7 13 Example: int bankbalance=931786; float weeklybudget = (float) bankbalance /4; Another way: float weeklybudget = bankbalance /4.0;
Boolean expressions: true or false • |, || or • 5==(1+3+7) | a+b==b+a • E1 E2 E1|E2 • 0 0 0 • 1 0 1 • 0 1 1 • 1 1 1 • &, && and • ! not • == equal to • < less than • > greater than • <= < or == • >= > or == Always after arithmetic; If not sure, use parentheses (…): first performed inside
Condition int x=2; x+4*2 > 5 true at what x is this false? int x=3; int y=1; x-4 == 1.5*(y+2) can this be true?
A simple program /* HelloWorld.java Purpose: printing a message to the screen */ class HelloWorld { // Each program is organised as a class public static void main(String[] args) { System.out.println("Hello World!"); } } // end of class HelloWorld /* Always Three Types of Elements ONLY: -comments -class (with modifiers) -methods (with modifiers & parameters/arguments) */
More on Method Method in Java is a named set of instructions that transforms some input into an output. This is, actually, a machine implementation of the concept of algorithm which itself is a computational analogue to the mathematical concept of function. Static method: is shared by all instances.
Example of a method (1) Square function y = x2 (an infinite Table) x y 1 1 2 4 ................ 5 25 ................ 11 121 ................ The table can be used for invoking a specific value, like, 72 = 49 or 102 = 100.
Example of a method (2) A Java method to calculate the square function: public int sq(int x){ return xx;} To make it work, variables are needed: int sevs=sq(7); //puts 49 into sevs int tens=sq(10);// puts 100 into tens
Structure of a method Output’s type Inputs modifiers return-type name ( parameter-list ) { statements; return variable/expression; //if return type is not void } Modifiers: • static - method/variable that belongs to class as whole and is shared by all instances • public - method/variable that is accessible from anywhere • private - method/variable that is accessible from only within the class
HelloWorld with a method // Hello-world program to demonstrate BlueJ class Hello{ // Method that does the work of printing public void go() { System.out.println("Hello, world"); } // main method for working outside BlueJ public static void main(String[] args) { Hello hi = new Hello(); //instance hi.go(); //method in instance hi } }
HelloWorld : WHY Why dots in System.out.println("Hello, world"); hi.go(); ? • To take method from a specific class instance • To take a class from a set of classes: Java is organised as a hierarchically structured set of classes in individual files
Loop for for(int var=1;var<=st;var=var+1) {do operations depending on var} var=var+1 is var++ • Two types of parentheses: (loop control) and {body to do operations} • Three items in control ( ): • initialising the counting variable once, • variable update, and • stop-condition • Exit from the loop – only from within control ( … )
Loop for for(int var=1;var<=st;var++) % no ‘;’ here!!! {do operations depending on var} Two types of parentheses: (loop specified) and {body to do} • The expression in loop control “()” consists of three items in this order: • initialising the counting variable once • stop-condition • variable update • First, • var is initialised, • stop-condition is tested; • if true, block {} is executed, • if no, the program proceeds further on, after the block { } • control returns to ( ) • After control returns to ( ), • varis updated; • stop-condition is checked; • if true, block {} is executed, then control returns to ( ), • if no, the program proceeds further on, after the block { }
HelloWorld N times BlueJ public class HelloN { int number; \\ variable declared public void go() { System.out.println("Hello, world"); } public HelloN(int howmany) {number=howmany; } \\constr to initialise object public void prrt() \\printing number times { for(int i=1;i<=number;i++) \\loop go(); System.out.println("ok"); } }
No { } in for-loop in HelloN Why? Let us add { }: where? Is there any difference between before and after “ok”?
Loop while: less rigid for(init;test;update){ statements } All three in the parentheses refer to a counter that is initialised, updated and tested over reaching the pre-specified threshold Structure of while loop contains same elements – init, test and update – but less rigid, not necessarily based on counter but rather on a condition; while’s structure: init; while(test){ statements; update } Similar elements: ( ), { }, initialisation, test condition (not necessarily involving the counter!), and update
Example: for (int K = 10; K > 1 ; K--) { //k-- is k=k-1; if (K < 7) { break; } // Stops execution of the loop else System.out.print(“ ” + K); } 1. What this loop does? 2. Can it be rewritten in the whileformat?
Example: answer 1 for (int K = 10; K > 1 ; K--) { if (K < 7) { break; } else { System.out.print(“ ” + K);} } What this loop does? Prints 10 9 8 7
Example: answer 2 int K = 10; while(K >1) { if (K< 7) break; else System.out.print(“ ” + K); K--; }
BlueJ HelloWorld N times public class HelloN { int number; \\ variable declared public void go() { System.out.println("Hello, world"); } public HelloN(int howmany) {number=howmany; } \\constr-r to initialise an object public void prrt() \\printing number times { for(int i=1;i<=number;i++) \\loop go(); System.out.println("ok"); } }
Three branching structures • Do under a condition; otherwise do nothing [if… structure] if(BooleanExpr) Statement or if(BooleanExpr) {Statements} (2) Do under a condition; otherwise do differently [if…else… structure] if(BooleanExpr) {Statements1} else {Statements2}
Java branching structure (3): (3) Several conditions to do differently [if…else if… … else if… else structure] if(BoolExpr1) Statement1; else if(BoolExpr2)\\and not BoolExpr1 Statement2; else\\ (not BoolExpr1) and (not BoolExpr2) Statement3; • Note NO Bool. Exp at else
If/else example • Ticket’s price is £5, 60+ concession £3, children 12 or less go for free • Need a variable for the age, say YourAge, and the price, say Price; • The fragment can be as: if (YourAge<=12) Price=0; else if (YourAge<=60) Price=5; else //note NO CONDITION to be put here Price=3;
Statements • Assignment (followed by ;) • Method call (followed by ;) • if/ifelse/else (block, no ;) • for/while loop (block, no ;) • break (followed by ;)
Double loop with method class ATM { public static void main (String[] args) { PrTab(2,4); }\\end main static PrTab(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
This produces: produces 1! 2 3 4 5 2! 3 4 5 6 3! 4 5 6 7 Q: How to make the print look better? (See printing method in TicketMachine – next time.) Q: How to modify table to other ranges? Q: Make a MULTIPLICATION TABLE?
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, nextInt(), or double, nextDouble()) 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 (int ik=0; ik<num; ik++) System.out.print(‘.’); System.out.println(); } \\end of main } \\end of class [footnote: will not compile!!!]
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
Strings(1) Declaring a String Object String variable • An object of the class String – The class String is defined in java.lang.String and is automatically imported into every program Create a String object by using the keyword new and the String constructor method • String aGreeting = new String(“Hello”); or by assigning an actual string String aGreeting = “Hello”;
Strings(2) Comparing String Values • Strings are never actually changed; instead new Strings are created and String variables hold the new addresses; A part of the Java system called the garbage collector discards the unused strings • Strings are not numbers; arithmetic and logic Java operations are not applicable. To compare Strings, a number of methods are utilised: – equals() method if s1 and s2 are declared and initialised as String: s1.equals(s2) true if s1 and s2 are exactly the same sequences of characters NEVER s1==s2 !!! This is wrong, == applies to numbers only.
Strings(3) Comparing String Values • Try "HaHaHa ” "haHaHa" (2 differences) s1.length() number of characters in s1 • charAt() method requires an integer argument which indicates the position of the character that the method returns s1.charAt(N) N-th character in s1 (starting from N=0) String ss= “Look at you!”; Q. What is ss.charAt(3)? ss.charAt(7)? ss.charAt(17)? [A. In respect, ‘k’, ‘ ’ , and error]
Strings(4) s1.substring(N,M) part of s1 in positions N, N+1, ..., M-1 (positions are numbered from 0 !!!) String ss= “Look at you!”; What is ss.substring(3,7)? Concatenation Concatenation - Joining strings, can be done with symbol + “45” + “36” = “4536”
Class Math (no need to import) Math.pi =3.14…, the ratio of the circumference to its diameter Math.abs(a) a if a >= 0, or -a if a < 0 Math.log(a) the natural logarithm (base e) of number a Math.sqrt(a) square root of number a Math.pow(a,b) ab ; if b is an integer then ab =aa…a (b times)
Math.random() pseudorandom number: double within interval [0.0, 1.0) (zero included, unity not) How to use it to generate a random integer between 1 and 6 (inclusive), to imitate casting a dice?
Casting a dice double aa=Math.random(); //aa, a real number between 0 and 1 int an= 6*aa;//a real number between 0 and 6 int rand=(int) an; // whole number between 0 and 5 int randw=rand+1; // whole number between 1 and 6 The same in one line: int randw= (int) (6*Math.random()+1);
Casting a dice question How to generate a random integer between 10 and 20 inclusive? Answer: int rdt= (int) (11*Math.random()+10); Another possibility: using class Random with import java.util.Random
This is what was covered tonight • Primitive type casting • Boolean expression, statements • Concept of method – a touch • Loop for, while in a method • Double loop • Choice structure if/elseif/else • Input from keyboard classes • String • Math