Top Banner
IOOP Review 5.0
184

IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

Jan 03, 2016

Download

Documents

Heather Lane
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

IOOP

Review

5.0

Page 2: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

Topics (1)• Bits and Bytes• Classes and Objects• Primitive vs. Object Types• Java Operators and Expressions• Keyword this• null vs. void• Enumerated Type• Switch-case statement• Wrapper Classes

(autoboxing/unboxing)

Page 3: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

3

Base-10

10 digits: 0 - 9 (decimal) place values: 10x

i.e. 6543

6000 + 500 + 40 + 3 = 6543

103 102 101 100 1000 100 10 1

6 x 103 5 x 102 4 x 101 3 x 100 6000 500 40 3

Page 4: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

4

Base-2

2 digits: 0 - 1 (binary) place values: 2x

i.e. 0101 (binary)

0 + 4 + 0 + 1 = 5 (decimal)

23 22 21 20

8 4 2 1

0 x 23 1 x 22 0 x 21 1 x 20

0 4 0 1

Page 5: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

5

Bits & Bytes

bit = binary digit (0-1) byte = 8 bits

i.e. 00110101 (binary)

0 + 0 + 32 + 16 + 0 + 4 + 0 + 1 = 53 (decimal)

27 26 25 24 23 22 21 20

128 64 32 16 8 4 2 1

0 0 1 1 0 1 0 127 26 25 24 23 22 21 20

0 0 32 16 0 4 0 1

Page 6: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

6

32-bit vs. 64-bit Machines

• system architecture• instruction set

• machine language

x86 = 32-bit x64 = 64-bit

Page 7: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

7

Class diagram (static view)

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 8: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

8

Object diagram(dynamic view)

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 9: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

9

Primitive types vs. Object types

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

32

object type

primitive type

SomeObject obj;

int i;

Page 10: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

10

What is the output?

• int a;int b;a = 32;b = a;a = a + 1;System.out.println(b);

• Person a;Person b;a = new Person("Everett");b = a;a.changeName("Delmar");System.out.println(b.getName());

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 11: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

11

Primitive types vs. Object types

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

32

ObjectType a;

int a;

ObjectType b;

32

int b;

b = a;

Page 12: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

12

Java operators

Page 13: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

13

What is the output? System.out.println(18 % -7.0);

int a = 5;int b = 3;int c = ++a - 2 * b--;System.out.print(“a = ” + a + “\n”); System.out.print(“b = ” + b + “\n”); System.out.print(“c = ” + c + “\n”);

Page 14: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

14

What is the output? System.out.println(18 % -7.0);

4.0

int a = 5;int b = 3;int c = ++a - 2 * b--;System.out.print(“a = ” + a + “\n”); System.out.print(“b = ” + b + “\n”); System.out.print(“c = ” + c + “\n”);

a = 6

b = 2

c = 0

Page 15: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

15

Java relational operators

Boolean result

Tests equality …. not identity!!

Page 16: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

16

Java logical operators

BINARY&& and|| or^ exclusive or

UNARY

! not

Page 17: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

17

Logic operators for boolean values

Operands && || ^ T T T T FT F F T T

F T F T T

F F F F F

Which are examples of short-circuit operators?

Page 18: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

18

Logic operators for boolean values

Operands && || ^ T T T T FT F F T T

F T F T T

F F F F F

Page 19: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

19

What is the result?

35 / 9 == 4false

5 < 6 || false && 2 == 3 true

boolean test = false;

test=false==false;

System.out.println(test); true

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 20: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

20

Internal and external method calls

• Internal method callmethodName();

No variable name is required

• External method callobject.methodName();

Uses dot (.) operator

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 21: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

21

this keyword• this could be used as a reference to the

invoking object instead of method calls

public class MailItem { private String from; private String to; private String message;

public MailItem(String from, String to, String message) { this.from = from; this.to = to; this.message = message; }

Methods omitted. }

Page 22: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

22

null

• null is a special value in Java• Object fields are initialized to null by default.

• You can test for and assign null:

private NumberDisplay hours;

if(hours != null) { ... }

hours = null;

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 23: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

23

null vs. voidnull

• object reference not defined and points to special value of “nothing”

• used to see if an object was created and actually exists

void• empty or no value/type• used as the return type for a

method when “nothing” is being returned

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 24: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

24

Enumerated Types• A language feature defining a type

• Declared like a class using enum instead of class to introduce a type name

• Used to define a list of variable names denoting the set of values belonging to this type:– Alternative to static int constants– When the constants’ values would be

arbitraryObjects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 25: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

25

A basic enumerated type

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

public enum CommandWord{ GO, QUIT, HELP, UNKNOWN}

• By convention, names are defined in CAPS

• Each name represents an object of the enum type, e.g. CommandWord.HELP

• Enum objects are not created directly

• Enum definitions can also have fields, constructors and methods

Page 26: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

26

Using enumerated types

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

public enum CommandWord{ GO, QUIT, HELP, UNKNOWN}

String commandWord = command.getCommandWord();if(commandWord.equals("help")) {

printHelp();}else if(commandWord.equals("go")) {

goRoom(command);}else if(commandWord.equals("quit")) {

wantToQuit = quit(command);}

Page 27: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

27

public enum CommandWord{ GO, QUIT, HELP, UNKNOWN}

if(commandWord.equals("help")) {printHelp();

}else if(commandWord.equals("go")) {

goRoom(command);}else if(commandWord.equals("quit")) {

wantToQuit = quit(command);}

if(commandWord == CommandWord.HELP) {printHelp();

}else if(commandWord == CommandWord.GO) {

goRoom(command);}else if(commandWord == CommandWord.QUIT) {

wantToQuit = quit(command);}

String type commandWo

rd

CommandWord type

commandWord

data type using enum

Page 28: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

28

if(commandWord == CommandWord.HELP) {printHelp();

}else if(commandWord == CommandWord.GO) {

goRoom(command);}else if(commandWord == CommandWord.QUIT) {

wantToQuit = quit(command);}

Use switch to express code intent even more clearly ...

switch (commandWord) {case HELP:

printHelp();break;

case GO:goRoom(command);break;

case QUIT:wantToQuit = quit(command);break;

}

Page 29: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

29

Wrapper classes• Primitive types are not objects types

• Primitive-type values must be wrapped in objects to be stored in a collection!

• Wrapper classes exist for all primitive types:

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

simple type wrapper classint Integerfloat Floatchar Character... ...

Page 30: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

30

Wrapper classes

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

int i = 18; Integer iwrap = new Integer(i); …int value = iwrap.intValue();

wrap the value

unwrap it

In practice, autoboxing and unboxing mean we don't often have to do

this explicitly

Page 31: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

31

Autoboxing and unboxing

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

private ArrayList<Integer> markList;

public void storeMark(int mark)

{

markList.add(mark);

}

int firstMark = markList.remove(0);

autoboxing

unboxing

Page 32: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

32

Topics (2)• Library Classes & Java API• Interface vs. Implementation• The String Class• Overloading• Equality vs. Identity• String methods

• Immutable String• Regular Expressions [ ]+• Fixed-size Arrays

Page 33: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

33

Using library classes

• Classes organized into packages

• Classes from the library must be imported using an import statement (except classes from java.lang)

• They can then be used like classes from the current project

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 34: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

34

Packages and import

• Single classes may be imported:

import java.util.ArrayList;

• Whole packages can be imported:

import java.util.*;

• Importation does NOT involve source code insertion

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 35: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

35

Reading class documentation

• Documentation of the Java libraries in HTML format

• Readable in a web browser

• Class API: Application Programmers Interface

• Interface description for all library classes

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 36: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

36 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 37: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

37

Interface vs implementation

The documentation includes (the WHAT):

• the name of the class

• a general description of the class

• a list of constructors and methods

• return values and parameters for constructors and methods

• a description of the purpose of each constructor and method

the interface of the class

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 38: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

38

Interface vs implementation

The documentation does not include (HOW):

• private fields (most fields are private)

• private methods

• the bodies (source code) of methods

the implementation of the class

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 39: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

39

The String class

• The String class is defined in the java.lang package

• It has some special features that need a little care

• In particular, comparison of String objects can be tricky

Page 40: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

40

String concatenation

• 4 + 59

• "wind" + "ow""window"

• 4 + 5 + ”window" + 4 + 5”9window45"

• "# " + price + " cents""# 500 cents"

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

overloading

Page 41: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

41

What is the output?

• System.out.println(5 + 6 + "hello");

• System.out.println("hello" + 5 + 6);

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

11hello

hello56

Page 42: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

42

String equalityif(input == "bye") { ...}

if(input.equals("bye")) { ...}

** Always use .equals( )

for text equalityObjects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

tests identity

tests equality

Page 43: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

43

Identity vs equality 1Other (non-String) objects:

person1 = = person2 ?

“Fred”

:Person

person1 person2

“Jill”

:Person

Page 44: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

44

Identity vs equality 1Other (non-String) objects:

person1 = = person2 ?false

“Fred”

:Person

person1 person2

“Jill”

:Person

Page 45: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

45

Identity vs equality 2Other (non-String) objects:

“Fred”

:Person

person1 person2

“Fred”

:Person

person1 = = person2 ?

same

value

Page 46: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

46

Identity vs equality 2Other (non-String) objects:

“Fred”

:Person

person1 person2

“Fred”

:Person

person1 = = person2 ?false

same

value

Page 47: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

47

Identity vs equality 3Other (non-String) objects:

“Fred”

:Person

person1 person2

“Fred”

:Person

person1 = = person2 ?

Page 48: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

48

Identity vs equality 3Other (non-String) objects:

“Fred”

:Person

person1 person2

“Fred”

:Person

person1 = = person2 ?true

Page 49: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

49

Identity vs equality (Strings)

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

"bye"

:String

input

"bye"

:String

String input = reader.getInput();if(input = = "bye") { ...}

= = ?

(may be) false!

= = tests identity

Page 50: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

50

Identity vs equality (Strings)

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

"bye"

:String

input

"bye"

:String

String input = reader.getInput();if(input.equals("bye")) { ...}

.equals ?

true!

.equals tests equality

Page 51: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

51

The problem with Strings

• The compiler merges identical String literals in the program code– The result is reference equality for

apparently distinct String objects

• But this cannot be done for identical Strings that arise outside the program’s code– e.g. from user input

Page 52: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

52

Methods from String• boolean contains(char c)• boolean endsWith(String s)• int indexOf(String s)• int indexOf(String s, int i)• String substring(int b)• String substring(int b, int e)• String toUpperCase( )• String trim( )

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Beware: strings are immutable!

Page 53: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

53

Immutable String

String methodString toUpperCase()

Incorrect useinput.toUpperCase();

Correct useinput = input.toUpperCase();

if(input.toUpperCase().contains())

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 54: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

54

Dividing Strings

public HashSet<String> getInput() { System.out.print("> "); String inputLine = reader.nextLine().trim().toLowerCase();

String[ ] wordArray = inputLine.split(" "); HashSet<String> words = new HashSet<String>();

for(String word : wordArray) { words.add(word); } return words;}

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 55: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

55

String .splitString[ ] split(String regex)

Splits this string around matches of the given regular expression.

String[] wordArray = inputLine.split(" ");Splits inputLine around the regular expression of “ ”.

Regular Expressions“ ” – space

“\t” - tab“\\s” - any white space

“[ \t]” – space or tab(grouping)“[ \t]+” – space or tab(one or more)

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 56: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

56

Using regexString.split()

String[] wordArray = origString.split(“[ \t]+”);Splits origString around (one or more) spaces and/or tabs

String[] wordArray = origString.split(“\\s+”);Splits origString around (one or more) spaces and/or tabs

String.trim().replaceAll()String newString =

origString.trim( ).replaceAll(“\\s+”, “ ”);Removes ALL leading and trailing spaces in origString with .trim

ANDReplaces ALL (one or more) white spaces with a SINGLE space

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 57: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

57

Fixed-size collections

• The maximum collection size may be pre-determined with an upper limit

• Array is an fixed-size collection type:

– stores object OR primitive data types

– special syntax unlike usual Java method calls (uses same as other languages)

– more efficient access than flexible-sized collections

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 58: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

58

Declaring array variables

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• LogAnalyzer class contains the field:

private int[] hourCounts;— indicates hourCounts is of type integer

array

• int would be the base type of the array

— the array object would store type int values

• difference between declarationsint hourCounts; // single int variableint[] hourCounts; // int-array variable

hourCounts = new int[24];

Page 59: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

59

Creating an array object

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

public class LogAnalyzer{ private int[] hourCounts; private LogfileReader reader;  public LogAnalyzer() { hourCounts = new int[24]; reader = new LogfileReader(); } ...}

Array object creation

— specifies size

Array variable declaration— does not contain size

Page 60: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

60 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Creating an array object

new type[integer-expression]new int[24]

• creates an object of type integer array

• creates array capacity to hold 24 integers

Page 61: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

61

The hourCounts array

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

private int[] hourCounts;

new int[24];

=

hourCounts = new int[24];

Page 62: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

62

Accessing an array array[integer expression]

• Square-bracket notation is used to access an array element by indexing:

labels[6]machines[0]

people[x + 10 -y]

• Valid indices depend on the length of the array and range from [0 … (length-1)]

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 63: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

63

Using an array

• Elements are used like ordinary variables

• The target of an assignment:labels[5] = ... ;machines[index] = new Machine(10);

• In an expression:double half = readings[0] / 2;adjusted = hourCounts[hour] – 3;hourCounts[hour]++;System.out.print(item[1].getName());

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 64: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

64

Standard array use

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

private int[] hourCounts;private String[] names;

... hourCounts = new int[24];names = new String[10];

...

hourcounts[i] = 0;hourcounts[i]++;System.out.println(hourcounts[i]);

declaration

creation

use

Page 65: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

65

Array literals {3, 15, 4, 5, …}

• Array literals in this form can only be used in declarations and NOT like this:

numbers = { 3, 15, 4, 5 };

• Related uses require new:

numbers = new int[ ] { 3, 15, 4, 5 };

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

private int[ ] numbers = { 3, 15, 4, 5 };

declaration, creation and initialization• The size is inferred from the data:

XX

Page 66: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

66

Array length

• length is a field rather than a method

• It is fixed size and can not be changed

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

private int[] numbers = { 3, 15, 4, 5 };

int n = numbers.length;

NO brackets!NO parentheses!

Page 67: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

67 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Topics (3)

• ArrayList• HashSet• HashMap• Collection constructor copying• Random• Collections.shuffle() • Anonymous Objects• Chaining

Page 68: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

68

Generic classesfor items of any type

ArrayList<parameter-type>• These collections are known and defined

as parameterized or generic types

• parameter type between the angle brackets is the object type of the items in the list

— ArrayList<Person>— ArrayList<TicketMachine>

• An ArrayList may store any object type, but ALL objects in the list will be the same type

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 69: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

69

Creating an ArrayList object in the constructor

• In Java versions prior to version 7 files = new ArrayList<String>( );

• Java 7 introduced ‘diamond notation’

files = new ArrayList< >( );

where the type parameter can be inferred from the variable it is being assigned tomyMusic:

MusicOrganizer

files

:ArrayList<String>

new

Page 70: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

70

Key methods of classArrayList

The ArrayList class implements list functionality with methods for the following operations:

— add(item)— remove(item)— get(index)— size()

Page 71: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

71

Object structures with ArrayList collections

• Only a single field that stores an object of type ArrayList<String>

• All work to access and manage the data is done in ArrayList object

• Benefits of abstraction by not knowing details of how work is done

• Helps us avoid duplication of information and behavior

Page 72: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

72

Adding a third file

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• Dynamic capacity with ability to increase and/or decrease as needed with its add( ) and remove( ) methods

• Keeps an internal count of the number of items with size( ) method returning that count

• Maintains the items in the order inserted with each new item added to the end of the list

• As an item is removed, all items following after the removed item are shifted up and forward in order to fill the removed item’s space

Page 73: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

73

Features of the collection• It increases its capacity as necessary• It keeps a private count of the number

of items in the list– size() accessor

• It keeps the objects in order of adding, but is otherwise unsorted

• Details of how this is done are hidden– Does that matter? – Does not knowing prevent us from using it?

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 74: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

74

ArrayList Index numbering

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• Implicit numbering which starts with index 0 (same as String class)

• Last item in the collection has the index size-1

• Thus, valid index values would be between [0 . . . size( )-1]

Page 75: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

75

Removal may affect numbering

• Removal process may change index values of other objects in the list

• Collection moves all subsequent items up by 1 position to fill the gap

• Indices of items in front of (preceding) the removed item are UNCHANGED

• Indices of items after (following) the removed item are decreased by 1

• Same “shifting” of items may also occur if adding new items into positions other than the end

files.remove(1);

Page 76: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

76

The general utility of indices

• Index values:– start at 0– are numbered sequentially– have no gaps in consecutive objects

• Using integers to index collections has a general utility:– next: index + 1– previous: index – 1– last: list.size( ) – 1– the first three: items at indices 0, 1, 2

• We could use loops and iteration to access items in sequence: 0, 1, 2, …

Page 77: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

77

Review• Items may be added and removed

• Each item has an index

• Index values may change if items are removed (or further items added)

• The main ArrayList methods are add, get, remove and size

• ArrayList is a parameterized or generic type

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 78: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

78

Using sets

import java.util.HashSet;

...HashSet<String> mySet = new HashSet<String>();

mySet.add("one");mySet.add("two");mySet.add("three");

for(String element : mySet) { do something with element}

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Compare with code

for an ArrayList!

Page 79: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

79

ArrayList vs. HashSet• Similarities

− Contain a collection of objects− Add objects (.add method)− Remove objects (.remove method)− Number of elements (.size method)− Iterator ability (.iterator method)

• Differences− HashSet objects are unique, while

an ArrayList can have duplicate objects

− HashSet objects are not ordered, while ArrayList objects are ordered

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 80: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

80

Maps• Maps are flexible-sized collections

that contain pairs of values− pair is a key object and a value object

• Uses the key to easily lookup the value− instead of using an integer index

• For example, a telephone book:− name and phone number pair

• Reverse-lookup of key using value− not so easy

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 81: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

81

Using mapsin a telephone directory

A map with strings as keys and values: name and telephone number

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

"Charles Nguyen"

:HashMap

"(531) 9392 4587"

"Lisa Jones" "(402) 4536 4674"

"William H. Smith" "(998) 5488 0123"

Page 82: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

82

Using maps.put and .get

Declaration and creation of phonebook HashMap:HashMap <String, String> phoneBook = new HashMap<String, String>();

HashMap .put method inserts an entry:phoneBook.put("Charles Nguyen", "(531) 9392 4587");phoneBook.put("Lisa Jones", "(402) 4536 4674");phoneBook.put("William H. Smith", "(998) 5488 0123");

HashMap .get method retrieves the value :String phoneNumber = phoneBook.get("Lisa Jones");System.out.println(phoneNumber);

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 83: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

83

List, Map and Set• Alternative ways to group objects

• Varying implementations available:−List: ArrayList, LinkedList−Set: HashSet, TreeSet

• HashMap is unrelated to HashSet, & HashSet is closer to ArrayList

• Name consist of 2 parts “Array” “List”−2nd word – collection type (List, Map, Set)−1st word – how it is implemented

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 84: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

84

New COPY of an existing ArrayList

• Declare a variable with the same ArrayList of <Element> type as the original ArrayList

• Create a new ArrayList object (with the same element type as original) to store the copy in

• Pass the original ArrayList as the parameter

• Point the variable to the new COPY of the original list with exact same contents

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

ArrayList<Track> copiedList = new ArrayList<Track>(tracks);

Page 85: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

85

Random library class

Generates a pseudo-random number by:

• Using the Random library class imported from the java.util package

• Creating an instance of class Random and assigning it to a local variable

• With that instance, call the method nextInt to get a number

• Optional parameter – upper limit size passed

import java.util.Random;

Random rand = new Random();

int index = rand.nextInt(size);

Page 86: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

86

Using Random

• The library class Random can be used to generate random numbers

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

import java.util.Random;...Random rand = new Random();...int num = rand.nextInt();int value = 1 + rand.nextInt(100);int index = rand.nextInt(list.size());

Page 87: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

87

Collections library class

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

import java.util.Collections;

ArrayList<String> files = new ArrayList< >();

Collections.shuffle(files);

Shuffles the items in a collection by:

• Using the Collections library class imported from the java.util package

• Calls the method shuffle to randomly change the order of existing items in the collection without removing/adding items

• Parameter – pass the entire collection

Page 88: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

88

Anonymous objects

• Objects are often created and handed on elsewhere immediately:

Lot furtherLot = new Lot(…);lots.add(furtherLot);

• We don’t really need furtherLot:

lots.add(new Lot(…));

Page 89: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

89

Chaining method calls

• Methods often return objects

• We often immediately call a method on the returned object:

Bid bid = lot.getHighestBid();Person bidder = bid.getBidder();

• We can use the anonymous object concept and chain method calls:Person bidder = lot.getHighestBid().getBidder();

Page 90: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

90

Chaining method calls

String name = lot.getHighestBid().getBidder().getName();

• Each method in the chain is called on the object returned from the previous method call in the chain.

Returns a Bid object from the Lot

Returns a Person object from the Bid

Returns a String object from the Person

Page 91: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

91 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Topics (4)

• Iterations• Definite vs. Indefinite vs. Infinite• for-each, for, while loops

Page 92: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

92

Iteration• We often want to perform some actions

an arbitrary number of times– e.g. print ALL the file names in the organizer– How many are there?

• Most programming languages include loop statements or iterative control structures to make this possible

• Java has several sorts of loop statement– We will start with its for-each loop

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 93: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

93

For-each loop pseudo code

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

for(ElementType element : collection) { loop body}

For each element in collection, do the things in the loop body.

** where element is indeed a variable declaration of type ElementType and the variable is known as the loop variable

loop headerfor keyword

Statement(s) to be repeated

Pseudo-code expression of the actions of a for-each loop

General form of the for-each loop

Page 94: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

94

for-eachPROS• easy to use• access to ALL items one-by-one• ability to change the state of the item• terminates automatically• selective filter using if-else statements• actions in body may be complicated with multiple

lines• use on ANY type of collection• abstraction from details of how handling occurs

CONS• no index provided• can NOT stop during looping• definite iteration of ALL items• can NOT remove or add elements during loop• use for collections only• access must be to ALL items in sequence [0 to size-1]

Page 95: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

95

Main concepts to be covered

• The difference between iterations:– definite … size – indefinite (unbounded) … 0 -

infinite

• The while loop

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 96: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

96

Search tasks are indefinite

• We cannot predict, in advance, how many places/times we have to look

• It may not be any at all (equal 0)

• Although, there may well be an absolute limit (equal ALL)– Checking EVERY possible location

• And INFINITE loops are also possible– Through error or the nature of the task

Page 97: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

97

The while loop

• A for-each loop repeats the loop body for each object in a collection

• Sometimes we require more variation than this (and not access every item)

• We could use a boolean condition to decide whether or not to keep going (instead of going to the very end)

• A while loop provides this control

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 98: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

98

While loop pseudo code

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

while(loop condition) { loop body}

while we wish to continue, do the things in the loop body

boolean test is truewhile keyword

Statements to be repeated

Pseudo-code expression of the actions of a while loop

General form of a while loop

Page 99: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

99

Looking for your keys

while(the keys are missing)

{

look in the next place;

}

while(not (the keys have been found))

{

look in the next place;

}

while(true)

while(!(false))

Page 100: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

100

Looking for your keys

boolean searching = true;

while(searching) { if(they are in the next place) {

searching = false; }} Suppose we don’t find

them?Infinite loop

Page 101: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

101

for-each == while

public void listAllFiles(){ int index = 0; while(index < files.size()) { String filename = files.get(index); System.out.println(filename); index++; }} Increment index by 1

while the value of index is less than the size of the collection, get and print the next file name, and then increment index

public void listAllFiles(){ for(String filename : files) { System.out.println(filename); }}

Page 102: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

102

Elements of the loop

• We have declared an index variable

• The condition must be expressed correctly

• We have to fetch each element

• The index variable must be incremented explicitly

Page 103: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

103

while loop search

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

PROS• can stop at any time during looping• indefinite iteration of SOME items using loop

condition• may change collection during loop• use explicit index variable inside and outside of loop• index variable records location of item at all times

CONS• more effort to code• requires index looping variable declaration• maintain looping variable and manually increment• correctly determine loop condition for termination• must .get item using index to access the item• NOT guaranteed to stop with possible infinite loop

Page 104: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

104

for-each versus while• for-each

– easier to write– safer because it is guaranteed to stop– access is handled for you

Access ALL items without changing collection

• while– don’t have to process entire collection– doesn’t have to be used with a collection– take care to watch for an infinite loop

Access only SOME items, includes a record of the index location, and also could be used for non-collections

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 105: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

105

Searching a collection• A re-occurring fundamental activity

• Applicable beyond collections

• Indefinite iteration because we don’t know exactly where to look

• We must code for both success (stops midway) and failure (after all searched) using an exhausted search

• Either could make the loop condition false to terminate the loop

• Even works if collection is empty

Page 106: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

106

Finishing a search

So when do we finish a search?

• No more items to check: index >= files.size()

OR

• Item has been found:found == true found ! searching

Page 107: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

107

Continuing a search• With a while loop, we need to state

the condition for continuing

• The loop’s condition will then be the opposite of that for finishing

• Expressions & operators are inverted:

–>= becomes < –or becomes and– true becomes !true

Page 108: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

108

Search condition >= becomes <

FINISH search when:• No more items OR Item is found

index >= files.size() || found

CONTINUE search while:• Still more items AND Item is not

found index < files.size() || !found

Page 109: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

109

Search condition >= becomes <

FINISH search when:• No more items OR Item is found

index >= files.size() || found

CONTINUE search while:• Still more items AND Item is not

found index < files.size() || !found

Page 110: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

110

Search condition OR becomes AND

FINISH search when:• No more items OR Item is found

index >= files.size() || found

CONTINUE search while:• Still more items AND Item is not

found index < files.size() && !found

Page 111: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

111

Search condition OR becomes AND

FINISH search when:• No more items OR Item is found

index >= files.size() || found

CONTINUE search while:• Still more items AND Item is not

found index < files.size() && !found

Page 112: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

112

Search condition true becomes !true

FINISH search when:• No more items OR Item is found

index >= files.size() || found

CONTINUE search while:• Still more items AND Item is not

found index < files.size() || !found

Page 113: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

113

Search condition true becomes !true

FINISH search when:• No more items OR Item is found

index >= files.size() || found

CONTINUE search while:• Still more items AND Item is not

found index < files.size() || !found

Page 114: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

114

Searching a collection

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

int index = 0;boolean found = false;while(index < files.size() && !found) { String file = files.get(index); if(file.contains(searchString)) { // We don't need to keep looking. found = true; } else { index++; }}

// Either we searched the whole collection, // or we found it at index.

Page 115: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

115

Method findFirst public int findFirst(String searchString){ int index = 0; boolean searching = true;

while(searching && index < files.size()) { String filename = files.get(index); if(filename.contains(searchString)) { // Match found searching = false; // Stop searching } else // Not found here { // Keep searching index++; // Move to next item } }

if(searching) // NO match found { return -1; // Return out-of-bounds } // index for failures else { // Return item index of return index; // where it is found }}

Page 116: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

116

Indefinite iteration

• Does the search still work if the collection is empty (but not null)?– Yes! The loop’s body would NOT be

entered in that case.

• Important feature of while:– The body of the while could be

executed zero or more times.

Page 117: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

117

While with non-collections// Print all even numbers from 2 to 30

int index = 2;

while(index <= 30)

{

System.out.println(index);

index = index + 2;

}

NOTE: This while loop uses definite iteration, since it is clear from the start exactly how many times the loop will be repeated. But, we could NOT have used a for-each loop, because there is no collection of items.

local variable START: index start

STOP: index end

increment

Page 118: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

118 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Topics (5)

• Iterator and iterator• Class vs. Instance

― Variables― Constants― Methods

• main method

Page 119: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

119

Iterator type• Third variation to iterate over a

collection

• Uses a while loop and Iterator object

• But NO integer index variable

• Takes advantage of abstraction with use of library class (like for-each)

• import java.util.Iterator;

• Iterator class vs. iterator( ) method

Page 120: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

120

Iterator and iterator()

• Collections (e.g. ArrayList) have an iterator() method

• This returns an Iterator object

• Iterator<E> has three methods:

– boolean hasNext()

– E next()

– void remove()

Page 121: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

121

Using an Iterator object

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Iterator<ElementType> it = myCollection.iterator();while(it.hasNext()) { call it.next() to get the next object do something with that object}

java.util.Iteratorreturns an Iterator

object

• Declare variable it as type Iterator of ElementType

• Use iterator() method of collection (e.g. ArrayList) and assign the returned Iterator object to variable it

• it object *indexes* to the first element in the collection

• it.hasNext() checks to see if there is an object at the index

• it.next() will get the actual object and advance the index

Page 122: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

122

Iterator object example java.util.Iterator

returns an Iterator object

public void listAllFiles(){ Iterator<Track> it = files.iterator(); while(it.hasNext()) { Track tk = it.next(); System.out.println(tk.getDetails()); }}

• Prints ALL tracks in the collection (like while & for-each)

• Still use while … BUT do not need an index variable

• Iterator keeps track of current location, if there are any more items (hasNext) and which one to return (next)

• Iterator.next returns next item AND moves past that item (can NOT go back)

Page 123: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

123 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Iterator object

An iterator, after one iteration, pointing to the next item to be

processed.

Page 124: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

124

Iterator mechanics

Objects First with Java

Page 125: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

125 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

myList of type List

:Element

myList:List

:Element :Element:Element

Page 126: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

126 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

:Element

myList:List

:Element :Element

:Iterator

myList.iterator()

:Element

Page 127: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

127 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

:Element :Element :Element

:Iterator

hasNext()? ✔next()

Element e = iterator.next();

:Element

:Iterator

myList:List

Page 128: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

128 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

:Element :Element :Element

hasNext()? ✔next()

:Element

:Iterator :Iterator

myList:List

Page 129: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

129 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

:Element :Element :Element

hasNext()? ✔next()

:Element

:Iterator :Iterator

myList:List

Page 130: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

130 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

:Element :Element :Element

hasNext()? ✔next()

:Element

:Iterator :Iterator

myList:List

Page 131: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

131 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

:Element :Element :Element

hasNext()? ✗

:Element

:Iterator

myList:List

Page 132: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

132 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Track example private ArrayList<Track> tracks;

:Track

tracks:ArrayList<Track>

:Track :Track:Track

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

Each Track has:•String artist•String title•String filename

Page 133: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

133 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Track example

public void listAllFiles(){ Iterator<Track> it = tracks.iterator(); while(it.hasNext()) { Track t = it.next(); System.out.println(t.getDetails()); }}

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

Page 134: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

134 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Track example Iterator<Track> it = tracks.iterator();

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

it:Iterator

• Use the iterator method of the ArrayList class to get an Iterator object for tracks

• Assigns the Iterator object to the local variable named it

Page 135: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

135 Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Track example while(it.hasNext())

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

it:Iterator it.hasNext()?

true

Page 136: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

136

Track example Track t = it.next();

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

it:Iterator

it.next( ) will:

1)Return element(object) at it

2)Move to the next elementt

= it:Iterator

Page 137: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

137

Track example System.out.println(t.getDetails());

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

t.getDetails( ) makes an external method call to the Track class with the t object to print out the String artist, title and filename fields.

t

it:Iterator

Page 138: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

138

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

Exit 1st iteration of while bodyand repeat loop

X

Page 139: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

139

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

2nd iteration

true

=

hasNextnext

Page 140: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

140

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

Exit 2nd iteration

X

Page 141: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

141

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

3rd iteration

=

Page 142: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

142

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

Exit 3rd iteration

X

Page 143: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

143

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

4th iteration

=

Page 144: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

144

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

t

it:Iterator

Exit 4th iteration

X

Page 145: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

145

Track example

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

while(it.hasNext()) { Track t = it.next(); System.out.println (t.getDetails());}

it:Iterator

5th iteration

false hasNext

NO more elements,so the while loop

STOPS!!

Page 146: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

146

Index versus Iterator• Ways to iterate over a collection:

– for-each loop (definite iteration)

• Process every element w/o removing an element

– while loop (indefinite iteration)

• Use if we might want to stop part way through

• Use for repetition that doesn't involve a collection

– Iterator object (indefinite iteration)

• Use if we might want to stop part way through

• Often used with collections where indexed access is not very efficient, or impossible

• Available for all collections in the Java class library

• Use to remove from a collection

• Iteration is important programming pattern

Page 147: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

147

Removing elements

• Impossible with a for-each loop

– Trying to remove( ) during an iteration causes ConcurrentModificationException

• while loop possible, but NOT recommended

– Easy to get indices wrong when removing

• Proper solution is use of Iterator with while

for each track in the collection{ if track.getArtist( ) is the out-of-favor artist: collection.remove(track)}

Page 148: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

148

Removing from a collection

Iterator<Track> it = tracks.iterator();while(it.hasNext()) { Track t = it.next(); String artist = t.getArtist(); if(artist.equals(artistToRemove)) { it.remove(); }}

Use the Iterator’s remove method.

• Does NOT use tracks collection variable in the loop body

• Must use Iterator’s remove( ) and NOT the ArrayList’s

• Iterator’s can only remove the last retrieved using next

• But it ALLOWS the element to be removed during loop

• Iterator abstracts removal and keeps iteration in sync

Page 149: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

149

Removing from a collection

while(it.hasNext()) { Track t = it.next(); String artist = t.getArtist(); if(artist.equals(artistToRemove)) { it.remove(); }}

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

t

it:Iterator=

Page 150: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

150

Removing from a collection

:Track

tracks:ArrayList<Track>

:Track :Track:Track

0 1 2 3

t

it:Iterator=

Iterator remove method will:•remove the LAST element that returned by Iterator•handle indices of remaining elements (abstraction)•keeps iteration properly in sync•BUT limited to removing only last element

remove

X

Page 151: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

151

Review• Use an ArrayList to store an arbitrary

number of object in a collection

• Loop statements allow a block of statements to be repeated

• for-each iterates over a whole collection

• while loop allows the repetition to be controlled by a boolean expression

• All collection classes provide Iterator objects that provide sequential access and modification to a whole collection

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 152: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

152

The for loop• The two variations of the for loop

(use definite iteration): > for-each > for

• The for loop is often used:– to iterate a fixed number of times– with a variable that changes a fixed

amount on each iteration

• The for loop is similar to while loop

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 153: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

153

for loop pseudo-code

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

for(initialization; condition; post-body action) { statements to be repeated}

General form of the for loop

Equivalent in while-loop form

initialization;while(condition) { statements to be repeated post-body action}

Page 154: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

154

A Java example

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]);}

int hour = 0;while(hour < hourCounts.length) { System.out.println(hour + ": " + hourCounts[hour]); hour++;}

for loop version

while loop version

Page 155: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

155

Practice

• Given an array of numbers, print out all the numbers in the array using a for loop:

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

int[] numbers = { 4, 1, 22, 9, 14, 3, 9};

for ...

Page 156: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

156

Practice

• Given an array of numbers, print out all the numbers in the array using a for loop:

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

int[] numbers = { 4, 1, 22, 9, 14, 3, 9};

for(int num = 0; num < numbers.length; num++){ System.out.println(numbers[num]);}

Page 157: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

157

Practice• Fill an array with the first 25 numbers in the

Fibonacci sequence:

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

int[] fib = new int[25];

fib[0] = 0;fib[1] = 1;

for ...

0 1 1 2 3 5 8 13 21 34 ...

Page 158: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

158

Practice• Fill an array with the first 25 numbers in the

Fibonacci sequence:

int[] fib = new int[25];

fib[0] = 0;fib[1] = 1;

for(int num = 2; num < fib.length; num++){ fib[num] = fib[num - 1] +

fib[num - 2];}

0 1 1 2 3 5 8 13 21 34 ...

Page 159: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

159

for loop with flexibilityPrint multiples of 3 that are below 40

• Start at any elementfor(int num = 3; num < 40; num = num + 3) { System.out.println(num);}

• End at any elementfor(int num = 3; num < 40; num = num + 3) { System.out.println(num);}

• Bigger steps of larger incrementsfor(int num = 3; num < 40; num = num + 3) { System.out.println(num);}

Page 160: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

160

Arrays and for-each loops• Can we use for-each to access EVERY

element in the array collection without adding/removing any elements? YES

• for-each loops may be used on arrays:

for(int value : hourCounts) { System.out.println(num);}

• However, there is NO index counter to use if location of element is needed

Page 161: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

161

for loops and iterators• Can we use a for loop with an Iterator to

access every element in a collection and remove selective elements? YES

• A special use of for loop may be used:for(Iterator<Track> it = tracks.iterator();

it.hasNext(); )

{ Track t = it.next(); if(t.getArtist().equals(artist)) { it.remove(); }}

• There is NO post-body action in the loop header, because the increment is being taken care of by it.next in the loop body

(But, the semicolon is still necessary)

Page 162: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

162

for

PROS• may be used on a collection, non-collection or array

• flexibility on start/end item and increment amount

• ability to add/remove/change the item during the loop

• access to loop counter (variable) is provided

• increment is completed automatically after each iteration

• may even be used with Iterators

CONS• definite iteration so number of elements MUST be

known

• access to items in sequence [start to end]

Page 163: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

163

Review• Arrays:

– are appropriate where a fixed-size collection is required

– use a special syntax (no methods)

• for loops:– are used when an index variable is

required– offer an alternative to while loops when

the number of repetitions is known– Used with a regular step size

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 164: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

164

Which loop should I use?• for-each:

– iterate over ALL elements in a collection– no adding or removing of any elements– no loop counter (index) is needed

• for:– definite iteration with known start and end– increment amount may be flexible (> 1)– loop counter (index) is needed

• while:– indefinite iteration with unknown # of iterations– loop end can be determined by some

condition(s)

> Non-collections:• use a for or while loop

> Removing elements:• (if examining ALL elements ) use for with Iterator • (if stopping before the collection ends) use while

Page 165: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

165

Class variables

• A class variable is shared between ALL instances/objects of the class

• It is a field stored in the class and exists independent of any instances

• Designated by the static keyword

• Public static variables are accessed via the class name (NOT object name)– Thermometer.boilingPoint

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 166: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

166

Constants

• A variable, once set, can have its value fixed

• Designated by the final keyword– final int max = list.size();

• Final fields must be set in their declaration or the constructor

• Combining static and final is common

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 167: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

167

Class constants

• static: class variable

• final: constantprivate static final int gravity = 3;

• Public visibility is less of an issue with final fields

• Upper-case names often used for class constants:

public static final int BOILING_POINT = 100;

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 168: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

168

Class constantsprivate static final int GRAVITY = 3;

private int xPosition;private int yPosition;

Page 169: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

169

Class Methods

• So far, only used instance methods

– invoked on an instance(object) of a class

• However, class methods are different

– may be invoked WITHOUT a class object

• Similar to class variables in that the class methods BELONG to the class

– having the class is enough to invoke it

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 170: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

170

Class Methods• Defined by adding static keyword in

front of the type name in the header public class Calendar {

public static int getNumberOfDaysThisMonth() { …

} …

• Such a method can then be called by specifying the class name

int days = Calendar.getNumberOfDaysThisMonth();

There is NO object so the name of class is used before the dot

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 171: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

171

The main method

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• The java system will always execute a method called main with a certain signature:

public static void main(String[] args){

...}

• If compiling and executing from the command line, then the main method must exist!

Page 172: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

172

The main method

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• main must exist

• main must be public

• main must be static (class method)

• main must have a String[] parameter

• Only main can be invoked

Example of a class method(may be invoked without an class instance)

Page 173: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

173

Main methodexample

• Consider placing in a separate class, containing just this

• The main method should– create an object– call the first method

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

public static void main(String[] args){ Game game = new Game(); game.play();}

Page 174: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

174

BlueJ projects• A BlueJ project is stored in a

directory on disk

• A BlueJ package is stored in several different files

• Some files store the source code, some store the compiled code, some store additional information

• BlueJ uses standard Java format for some files and adds some additional files with extra information

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 175: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

175

The BlueJ directory structure

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

UserInterfaceUserInterface

CalcEngineCalcEngine

CalculatorCalculator

project: calculator c:\bluej\calculator\Calculator.javaCalculator.classCalculator.ctxtCalcEngine.javaCalcEngine.classCalcEngine.ctxtpackage.bluejUserInterface.javaUserInterface.classUserInterface.ctxt

Page 176: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

176

The BlueJ file structure

• package.bluej – the package file. Contains information about classes in the package. One per package (project).

• *.java - standard Java source file (text). One per class.

• *.class - standard Java code file. One per class.

• *.ctxt - BlueJ context file. Contains extra information for a class. One per class.

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

Page 177: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

177

Standard Java files

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• source files: *.javaJava source files contain the source code in readable form, as typed in by the programmer.

• source files: *.javaJava source files contain the source code in readable form, as typed in by the programmer.

• class files: *.classJava class files contain byte code (a machine readable version of the class). They are generated by the compiler from the source file.

• class files: *.classJava class files contain byte code (a machine readable version of the class). They are generated by the compiler from the source file.

Page 178: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

178

The edit-compile-execute Cycle

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

source file

011010

110101

010001

class file011010

110101

1001

10

1

0111

0110110

1

1

editorcompiler(javac)

virtual machine(java)

Page 179: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

179

Editing

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• A file can be edited in any text editor

– Notepad, emacs, jEdit, PFE, vi, …

• Don't use Microsoft Word: by default, Word does not save in text format

– Includes formatting (i.e. fonts, shapes, …)

• Make sure to save with a .java file extension before compiling!

Page 180: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

180

Command line invocation

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• Compilation and execution of Java in JDK are done from a command line

–Windows: DOS shell

–Unix: Unix shell

• Must make sure that commands for compiler (javac) and runtime (java) are in the command path

Page 181: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

181

Compiling• JDK compiler: javac

• To invoke: javac ClassName.javacompiles source file and all classes that it depends on

• To find commands in path … either:? Change directory to location of commands

– cd C:\Program Files\Java\jdk1.7.0_65\bin– javac ClassName.java

? Ensure commands are in your command PATH– Control Panel -> System -> Advanced -> Environment Variables -> PATH

– Add “C:\Program Files\Java\jdk1.7.0_65\bin”– javac ClassName.java

• Creates byte file: ClassName.class

Page 182: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

182

Compilererror messages

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

C:\bluej\project> javac ClassName.java

ClassName.java:22: ';' expected.

private Parser parser

^

1 error

C:\bluej\project>

The programmer has to open the file in the editor, find the line number, fix the error and recompile.

Page 183: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

183

Execution

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

C:\bluej\project> java ClassName

• java starts the Java virtual machine

• The named class is loaded and execution is started

• Other classes are loaded as needed

• Only possible if class has been compiled

Page 184: IOOP Review 5.0. Topics (1) Bits and Bytes Classes and Objects Primitive vs. Object Types Java Operators and Expressions Keyword this null vs. void Enumerated.

184

Problem Execute what?

Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

• If we try:C:\bluej\project> java ClassName

• We get a compiler error:Exception in thread "main" java.lang.NoSuchMethodError: main

• The problem: there is NO instance object How does the system know which method to execute?