control structures (chapter 3) - u of w acs homepage · control structures order of topics:...

46
1 Control Structures (Chapter 3) 3 constructs are essential building blocks for programs Sequences compound statement Decisions if, switch, conditional operator Loops while, do while, for, enhanced for

Upload: others

Post on 19-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

1

Control Structures (Chapter 3)

3 constructs are essential building blocks for programs

• Sequences compound statement

• Decisions if, switch, conditional operator

• Loops while, do while, for, enhanced for

Page 2: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

2

Control Structures

Order of topics:

• compound

• while

• autoincrement and autodecrement

• if

• for

• do-while

• switch

• conditional operator

Loops often use a programming idiom

called autoincrement and autodecrement.

Page 3: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

3

Compound statement

A compound statement is a group of statements that are

executed sequentially, one following the other, from

beginning to end

{

temp = x;

x = y;

y = temp;

}

Opening brace

Closing brace

A compound statement is often used with if’s, while’s etc. … to provide a group of statements to be executed repeatedly or conditionally.

Page 4: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

4

Loops: while

While statement executes a statement as long as some expression is true

while ( logical expression )

statement

Very common for this statement

to be a compound statement

Page 5: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

5

Loops: while

How a while executes

Page 6: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

6

Loops: while

A logical expression is an expression that evaluates true or false. Suppose a, b, q, i, j are integers and found is boolean. Examples of logical expressions:

while ( logical expression )

statement

a < b

a+5 >= q*3

a == b

a != b

found

a < b || b < c

found && i<100

i < 100 && j < 100

!found && i < 100

! found

Page 7: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

7

Loops: while

Example 1 Page 70. Numbers0to9 displays the digits from 0 to 9 A code snippet:

int count = 0;

System.out.println("Numbers");

while ( count < 10 ){

System.out.println(count);

count = count + 1;

}

Indented code – this is practice we will follow

Executed repeatedly

until count is 10

Start of compound statement

How can you modify this code to display numbers from 9 down to 0?

Page 8: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

8

Loops: while

Example 2 Page 72. DisplayDigits displays the digits of a positive number.

A code snippet:

while (number > 0){

int digit = number % 10;

System.out.print("\t"+digit);

number = number / 10;

System.out.println("\t"+number);

}

Indented code – this is practice we will follow

Executed repeatedly as

long as number > 0

Start of compound statement

How can you modify this code to calculate the sum of an integer’s digits?

Page 9: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

9

Loops: Nesting whiles

A while can contain another while

Example. Suppose we need to display a times table (See example 3 page 72) 1 2 3 4 1 1 2 3 4 2 2 4 6 8 3 3 6 9 12 4 4 8 12 16

Page 10: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

10

Loops: Nesting whiles

To produce a times table its best to use one loop inside another. We say one loop is nested inside the other loop. To begin: we will just produce a simple vertical listing of i, j, i*j where i varies from 1 to 4 and j varies from 1 to 4. Ultimately we want a listing like that shown on previous slide.

see Example 3 on page 74 … shown on next slide see Exercise 14 on page 77

Page 11: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

11

Loops: Nesting whiles

public class NestedWhiles

{

public static void main(String[] args)

{

int i, j;

System.out.println("\ti\tj\ti*j");

// i takes on values 1,2,3,4

i = 1;

while (i < 5){

j = 1;

// j takes on values 1,2,3,4

while (j < 5){

System.out.println("\t"+i+"\t"+j+"\t"+(i*j));

j = j + 1;

}

i = i + 1;

}

System.out.println("program ended");

}

}

One while nested inside another while

For each value of i, j takes on values 1, 2, 3, 4

Page 12: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

12

Loops: Nesting whiles

Output from NestedWhiles

Heading

Note when i is 1 j takes on 1, 2, 3, 4 when i is 2 j takes on 1, 2, 3, 4 when i is 3 j takes on 1, 2, 3, 4 when i is 4 j takes on 1, 2, 3, 4

Page 13: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

13

Loops and Autoincrement, Autodecrement

statements such as n = n + 1;

m = m - 1;

are so common in programming that languages such as Java include special operators for this purpose called autoincrement and autodecrement

Page 14: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

14

Autoincrement and Autodecrement

n++; m--;

and ++ n; --m;

post-increment post-decrement pre-increment pre-decrement

Page 15: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

15

Autoincrement and Autodecrement

n++; ++ n; m--; --m;

When autoincrement is used alone and not as part of a larger expression pre- and post-increment have the same effect … to increment the operand by 1. Similarily …. When autodecrement is used alone and not as part of a larger expression pre- and post-decrement have the same effect … to decrement the operand by 1.

Page 16: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

16

ASIDE: for Autoincrement and Autodecrement

ASIDE: autoincrement, autodecrement within an expression… post-increment and post-decrement: the operand’s value is used and then the operand’s value is incremented/ decremented pre-increment and pre-decrement: the operand’s value is incremented/ decremented and then the operand’s value is used

// try this out

// what is printed?

int m = 1;

int n = m++ + m++;

System.out.println("m="+m);

System.out.println("n="+n);

// try this out

// what is printed?

int m = 1;

int n = ++m + ++m;

System.out.println("m="+m);

System.out.println("n="+n);

Page 17: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

17

Decision structures : the if statement

An if statement is coded with a logical expression and either one statement (statement1)

or two statements (statement1 and statement2)

written according to syntax as:

if ( logical expression) statement1

else statement2

We say the if is a decision structure … based on the outcome of evaluating the logical expression one of possibly two statements is executed.

The else clause is optional

Page 18: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

18

Decision structures : the if statement

if ( logical expression) statement1

else statement2

When an if executes the logical expression is evaluated and : •when the expression evaluates to true statement1 executes, and then execution of program statements continue at the statement following the if ;

•when the expression evaluates to false statement2 executes, and then execution of program statements continue at the statement following the if .

The else clause is optional

Page 19: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

19

Decision structures : the if statement

Example. PositiveOrNot page 79 Gets a number from the user and displays positive or not positive accordingly

int number = keyboard.nextInt();

System.out.print("the number "+number+" is ");

// Display a message if number is positive or not

if (number > 0) {

System.out.println("positive");

}

else {

System.out.println("not positive");

}

Only one of these

can execute

Strictly speaking, the { } are not required when there is just a single statement

… but it is a common practice to always use compound statements in control structures.

Page 20: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

20

Decision structures : the if statement

Another example:

Background: The Canadian SIN can be tested for a proper check digit.

Part of the process involves multiplying individual digits by either 1 or 2.

When a digit is multiplied by 2 and the result is greater than 9 then the two

digits of this product must be added.

For example, if the digit is 8 then the product 2*8 is 16. 16 is greater than 9

and so the sum of its digits is calculated 1+6 is 7

Along these lines consider a simpler program that:

1. gets a digit from the user

2. multiplies that digit by 2

3. if the product is <= 9 then displays the digit

otherwise displays the sum of the digits of the product

See next slide

Page 21: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

21

Decision structures : the if statement

import java.util.Scanner;

/**

* Get a digit from the user and multiply by 2

* If the result is larger than 9 add its two digits

*/

public class TestGreaterThanNine

{

public static void main(String[] args)

{

Scanner kb = new Scanner(System.in);

System.out.println("Please enter a single digit:");

int digit = kb.nextInt();

int result = digit*2;

if (result > 9) {

result = result/10 + result%10;

}

System.out.println(" result is "+result);

}

}

else clause is not necessary… and

so omitted

Page 22: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

22

Decision structures : nested ifs

statement1 or statement2 can be any Java statement statement1 , statement2 can be ifs, whiles, etc. We can nest one control structure inside another control structure

Page 23: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

23

Decision structures : nested ifs

Example. Round Cost Up Down pages 82-83

Suppose we must handle a purchase transaction in one of two

ways:

• If the customer pays cash we must round up/down as there are

no pennies.

• If the customers pays by electronic means there is a surcharge

of 25 cents.

Page 24: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

24

Decision structures : nested ifs

In pseudocode:

1. obtain the type and amount of the purchase

2. if the purchase is cash then round the cost up/down

3. otherwise add on the surcharge

4. display the total cost for the customer

Code for this is shown on next slide

Rounding up/down can be

handled with a nested if-else

Steps 2 and 3 can be handled with an if-else

Page 25: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

25

Decision structures : the if statement

if (typePayment.equals("cash")) {

if (originalCost % 5 < 3)

actualCost = originalCost - originalCost%5;

else

actualCost = originalCost + (5 - originalCost%5);

}

else

actualCost = originalCost + 25;

Nested if to handle

rounding for a cash payment

Page 26: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

26

Decision structures : nested ifs

Example. Consider the example beginning on page 84

A table for converting alphabetic grades to a numeric value:

When you need to convert some letter grade to its equivalent numeric

value you would look for which row the letter appears in and read off the

numeric value in that same row.

E.g. the numeric value corresponding to B is 3

Letter grade Numeric grade

A 4

B 3

C 2

D 1

F 0

Page 27: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

27

Decision structures : nested ifs

To program this conversion nested ifs are useful

We can structure this code in many ways

We will consider three ways to write the required logic

Letter grade Numeric grade

A 4

B 3

C 2

D 1

F 0

Page 28: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

28

Decision structures : nested ifs

Option 1:

if (letterGrade.equals("A"))

numericGrade = 4.0;

if (letterGrade.equals("B"))

numericGrade = 3.0;

if (letterGrade.equals("C"))

numericGrade = 2.0;

if (letterGrade.equals("D"))

numericGrade = 1.0;

This style requires the evaluation of expressions that would not be necessary (for example, when the grade is A the other ifs do not need to execute, but they do)

Page 29: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

29

Decision structures : nested ifs

Option 2:

if (letterGrade.equals("A"))

numericGrade = 4.0;

else

if (letterGrade.equals("B"))

numericGrade = 3.0;

else

if (letterGrade.equals("C"))

numericGrade = 2.0;

else

if (letterGrade.equals("D"))

numericGrade = 1.0;

else

numericGrade = 0.0;

This style uses indentation properly … each if is indented within the outer if

… but the code easily goes off the page/screen and gets hard to read

Page 30: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

30

Decision structures : nested ifs

Option 3:

if (letterGrade.equals("A"))

numericGrade = 4.0;

else if (letterGrade.equals("B"))

numericGrade = 3.0;

else if (letterGrade.equals("C"))

numericGrade = 2.0;

else if (letterGrade.equals("D"))

numericGrade = 1.0;

else

numericGrade = 0.0;

Due to the similarity of the logical conditions, this style would be favoured by

many … it shows the choices at the same level of indentation

Page 31: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

31

Loops: for

The for statement is commonly used where there is a need

for a statement to be executed a specific number of times

The syntax of the for statement we consider here is

for ( initialization; logical expression; increment )

statement

Page 32: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

32

Loops: for

Page 33: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

33

Loops: for

Example 1, Numbers0To9WithFor , uses a for to display integers 0 through 9

A code snippet:

for (int count=0; count < 10; count++ )

System.out.println(count);

Increment

Count is increased by 1

each time through the loop

Loop continues as

long as count < 10

count starts at 0

The statement that is executed repeatedly

This statement is indented for clarity and readability

Page 34: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

34

Loops: for

Example 2, GetIndividualCharacters, uses charAt and a for.

Displays characters one-by-one.

A code snippet:

String text = "abc123";

int textLength = text.length();

System.out.println("text string is: "+text);

System.out.println("now, each character one-by-one");

for (int i=0; i<textLength; i++){

char c = text.charAt(i);

System.out.println(c);

}

Length of the string

length used to control number

of times loop executes

Get the ith character

Indented code

Page 35: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

35

Loops: nesting control structures

Example 3, CountLetters, uses an if and a for.

Counts the number of times the letter ‘a’ appears.

A code snippet:

text = kb.nextLine();

int count = 0;

for (int i=0; i<text.length(); i++){

if (text.charAt(i) == 'a')

count++;

}

System.out.println("The line contains "+count

+" a\'s");

A line of text

length used to control number

of times loop executes

Use an if to test the ith character

Page 36: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

36

Loops: nesting control structures

Example 4, NestedFor, uses two fors, one nested inside the other

Lines 10 to 13 …. the outer for

Lines 11 and 12 … the inner for

10 for (int i =1; i <=4; i ++) {

11 for (int j =1; j <=4; j ++)

12 System.out.println "\t"+i+"\t"+j+"\t"+(i*j));

13 }

How many times

does this execute?

The outer for contains a

compound statement

Page 37: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

37

Loops: do-while

The do-while statement is useful when it is known the loop body

must execute at least once.

syntax :

do statement

while ( logical expression ) ;

Page 38: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

38

Loops: do-while

Page 39: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

39

Loops: do-while

The do-while statement is useful when it is known the loop body

must execute at least once.

syntax :

do statement

while ( logical expression ) ;

Page 40: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

40

Loops: do-while

Example. Suppose we are adding the digits of a positive integer

There must be at least one digit to add to a total can use do-while

System.out.println("Enter a number");

int n = kb.nextInt();

int sum = 0;

do {

sum += n % 10;

n /= 10;

}

while (n>0);

System.out.println("sum is "+sum);

Executed at least once

How many times does the loop execute if n is 5? 25? 0?

Page 41: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

41

switch

a decision structure where one choice, of possibly many, different

choices are made

According to the value of

the expression a case is

executed

Execution of statements

follows unless a break

statement is encountered

Page 42: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

42

Example 1

translating a letter grade to a numeric grade

Page 43: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

43

Example 1

String grade;

double nGrade;

System.out.println("Enter letter grade:");

Scanner kb = new Scanner(System.in);

grade = kb.next();

switch (grade) {

case "A": nGrade = 4.0;

break;

case "B": nGrade = 3.0;

break;

case "C": nGrade = 2.0;

break;

case "D": nGrade = 1.0;

break;

default: nGrade = 0.0;

}

System.out.println(grade+" --> "+nGrade);

expression

break

If expression != any of

the above cases values

Page 44: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

44

Conditional operator ? : (not in text)

A decision structure that can replace an if-then-else

if ( a > b ) larger = a

else larger = b;

larger = ( a > b ) ? a : b;

Can be written using ?: as

General recommendation: use it when it makes your code clearer.

You will see ?: used frequently.

Page 45: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

45

Conditional operator ? : (not in text)

A decision structure that can replace an if-then-else

if ( a > b ) System.out.println(a);

else System.out.println(b);

System.out.println(( a > b ) ? a : b);

Can be written using ?: as

You can use ?: anywhere an expression could appear.

Page 46: Control Structures (Chapter 3) - U of W ACS Homepage · Control Structures Order of topics: •compound •while •autoincrement and autodecrement •if •for •do-while •switch

46

Conditional operator ? :

General recommendation: use it when it makes your code clearer.

Maybe these are not so clear:

for (int i=0; i<line.length(); i++){

char c = line.charAt(i);

encrypted+= (c=='a')?'e':((c=='e')?'a':c);

}

Or encrypted+= c=='a'?'e':c=='e'?'a':c;