Chapter 5 Conditionals and Loops Topics Boolean expressions
Chapter 5: Conditionals and Loops • Topics: – Boolean expressions – Conditional statements – Increment and Decrement Operators (Chapter 2. 4) – Repetition statements – the Random class (Chapter 3. 4) – Comparing Strings 5 -1
Flow of Control • The order of statement execution is called the flow of control • Unless specified otherwise, the order of statement execution through a method is linear: one statement after another in sequence 5 -2
Flow of Control • Some programming statements allow us to: – decide whether or not to execute a particular statement – execute a statement over and over, repetitively • These decisions are based on boolean expressions (or conditions) that evaluate to true or false – For example, num > 5 5 -3
Conditional Statements • A conditional statement lets us choose which statement will be executed next • The Java conditional statements are the: – if statement – if-else statement – switch statement 5 -4
The if Statement • The if statement has the following syntax: if is a Java reserved word The condition must be a boolean expression. It must evaluate to either true or false. if ( condition ) statement; If the condition is true, the statement is executed. If it is false, the statement is skipped. 5 -5
continue System. out. println ("You entered: " + age); if (age < MINOR) System. out. println ("Youth is a wonderful thing. Enjoy. "); System. out. println ("Age is a state of mind. "); } } 5 -6
Boolean Expressions • A condition often uses one of Java's equality operators or relational operators, which all return boolean results: == != < > <= >= equal to not equal to less than greater than less than or equal to greater than or equal to 5 -7
Equality Operator and Assignment Operator • Note the difference between the equality operator (==) and the assignment operator (=) • num == 4 is a comparison: the boolean expression has the value true or false • num = 4 is an assignment: the expression has the value 4 because that’s the value of the left side 5 -8
A Mistake You’ll Probably Make • What if you accidentally drop an equals sign in the boolean expression? int num = 5; if (num = 4) System. out. println("Hello"); • You will get a “incompatible types” error: found : int required: boolean 5 -9
The if Statement • An if statement lets a program decide whether a particular statement is executed. if (sum > MAX) delta = sum - MAX; System. out. println ("The sum is " + sum); • First the condition is evaluated -- the value of sum is either greater than the value of MAX, or it is not • If the condition is true, the assignment statement is executed -- if it isn’t, it is skipped. • Either way, the call to println is executed next 5 -10
Indentation • The statement controlled by the if statement is indented to indicate that relationship • The use of a consistent indentation style makes a program easier to read and understand • Although it makes no difference to the compiler, proper indentation is crucial 5 -11
Indentation • Remember that indentation is for the human reader, and is ignored by the computer if (total > MAX) System. out. println ("Error!!"); error. Count++; Despite what is implied by the indentation, the increment will occur whether the condition is true or not 5 -12
The if Statement • The precedence of the arithmetic operators is higher than the precedence of the equality and relational operators if (total != stock + warehouse) inventory. Error = true; Sets a flag to true if the value of total is not equal to the sum of stock and warehouse 5 -13
The if-else Statement • An else clause can be added to an if statement to make an if-else statement if ( condition ) statement 1; else statement 2; • If the condition is true, statement 1 is executed; if the condition is false, statement 2 is executed • One or the other will be executed, but not both 5 -14
//********************************** // Wages. java Author: Lewis/Loftus // // Demonstrates the use of an if-else statement. //********************************** import java. text. Number. Format; import java. util. Scanner; public class Wages { //--------------------------------// Reads the number of hours worked and calculates wages. //--------------------------------public static void main (String[] args) { final double RATE = 8. 25; // regular pay rate final int STANDARD = 40; // standard hours in a work week Scanner scan = new Scanner (System. in); double pay = 0. 0; continue 5 -15
continue System. out. print ("Enter the number of hours worked: "); int hours = scan. next. Int(); System. out. println (); // Pay overtime at "time and a half" if (hours > STANDARD) pay = STANDARD * RATE + (hours-STANDARD) * (RATE * 1. 5); else pay = hours * RATE; Number. Format fmt = Number. Format. get. Currency. Instance(); System. out. println ("Gross earnings: " + fmt. format(pay)); } } 5 -16
Logic of an if-else statement condition evaluated true false statement 1 statement 2 5 -17
Exercise • Write an if/else statement that compares the variable age with 65 , adds 1 to the variable senior. Citizens if age is greater than or equal to 65 , and adds 1 to the variable non. Seniors otherwise 5 -18
Block Statements • Keep in mind that the two alternatives in an if else statement must be single statements. • If you need more than one statement for if or else, you must use braces to collect them into a single block statement. 5 -19
Block Statements • The following code produces a compiler error: if (total > MAX) System. out. println ("Error!!"); error. Count++; else System. out. println ("Total: " + total); current = total*2; • The compiler sees it as a simple if statement that ends with the println ("Error!!"); statement. Then there is a error. Count++ statement. But then there is what the compiler perceives as an unattached else, and that is flagged as a syntax error. 5 -20
Block Statements • Convert the code to what we want by adding braces if (total > MAX) { System. out. println ("Error!!"); error. Count++; } else { System. out. println ("Total: " + total); current = total*2; } 5 -21
Exercise • Modify the Ideal Weight (from lab 2) program so it will not compute the ideal weight if the height is less than 5 feet and print a message. 5 -22
Nested if Statements • The statement executed as a result of an if statement or else clause could be another if statement • These are called nested if statements if (num 1 > num 2) System. out. println ("greater"); else { if (num 1 == num 2) System. out. println ("same"); else System. out. println ("less"); } 5 -23
Nested if Statements • An else clause is matched to the last unmatched if (no matter what the indentation implies) • Braces can be used to specify the if statement to which an else clause belongs 5 -24
Exercise • Read in three integers from the user and determine the minimum. 5 -25
Repetition Statements • Repetition statements allow us to execute a statement multiple times. Often they are referred to as loops • Java has three kinds of repetition statements: – the while loop – the do loop – the for loop • The programmer should choose the right kind of loop for the situation 5 -26
Assignment Revisited • The right and left hand sides of an assignment statement can contain the same variable First, one is added to the original value of count = count + 1; Then the result is stored back into count (overwriting the original value) 5 -27
Increment and Decrement • The increment operator (++) adds one to its operand • The decrement operator (--) subtracts one from its operand • The statement count++; is functionally equivalent to count = count + 1; 5 -28
Increment and Decrement • The increment and decrement operators can be applied in postfix form: count++ count -- • or prefix form: ++count --count • Postfix and prefix are functionally equivalent when used alone in a statement, for example, count currently contains the value 5, the two increment statements assign 6 to count. 5 -29
Increment and Decrement • When used as part of a larger expression, the two forms can have different effects, for example, count currently contains the value 5, – Postfix: • total = count ++; // assign 5 to total and 6 to count – Prefix: • total = ++count; // assign 6 to total and 6 to count 5 -30
Exercises • Given an integer variable straws. On. Camel , write a statement that uses the increment operator to increase the value of that variable by 1 • Given an integer variable timer , write a statement that uses the decrement operator to decrease the value of that variable by 1 5 -31
The while Statement • A while statement has the following syntax: while ( condition ) statement; • If the condition is true, the statement is executed • Then the condition is evaluated again, and if it is still true, the statement is executed again • The statement is executed repeatedly until the condition becomes false 5 -32
Logic of a while Loop condition evaluated true false statement 5 -33
The while Statement • An example of a while statement: int count = 1; while (count <= 5) { System. out. println (count); count++; } • If the condition of a while loop is false initially, the statement is never executed • Therefore, the body of a while loop will execute zero or more times 5 -34
Exercise • What output is produced by the following code fragment? int num = 0, max = 20; while (num < max) { System. out. println(num); num +=4; } 5 -35
//********************************** // Average. java Author: Lewis/Loftus // // Demonstrates the use of a while loop, a sentinel value, and a // running sum. //********************************** import java. text. Decimal. Format; import java. util. Scanner; public class Average { //--------------------------------// Computes the average of a set of values entered by the user. // The running sum is printed as the numbers are entered. //--------------------------------public static void main (String[] args) { int sum = 0, value, count = 0; double average; Scanner scan = new Scanner (System. in); System. out. print ("Enter an integer (0 to quit): "); value = scan. next. Int(); continue 5 -36 Copyright © 2012 Pearson Education, Inc.
continue while (value != 0) { count++; // sentinel value of 0 to terminate loop sum += value; System. out. println ("The sum so far is " + sum); System. out. print ("Enter an integer (0 to quit): "); value = scan. next. Int(); } continue 5 -37
continue System. out. println (); if (count == 0) System. out. println ("No values were entered. "); else { average = (double)sum / count; Decimal. Format fmt = new Decimal. Format ("0. ###"); System. out. println ("The average is " + fmt. format(average)); } } } 5 -38
Exercise: Input Validation • Modify the Ideal Weight program. If the user enters a number less than 5 for feet, the program should print an error message and keep asking for another input. 5 -39
Infinite Loops • The body of a while loop eventually must make the condition false • If not, it is called an infinite loop, which will execute until the user interrupts the program • This is a common logical error • You should always double check the logic of a program to ensure that your loops will terminate normally 5 -40
Infinite Loops • An example of an infinite loop: int count = 1; while (count <= 25) { System. out. println (count); count = count - 1; } • This loop will continue executing until interrupted (Control-C) or until an underflow error occurs 5 -41
The Random Class 5 -42
The Random Class • The Random class is part of the java. util package • It provides methods that generate pseudorandom numbers, for example, to simulate a card shuffler. • A Random object performs complicated calculations based on a seed value to produce a stream of seemingly random values 5 -43
The Random Class • Random () – Creates a new pseduorandom number generator. – Random generator = new Random(); • Method: int next. Int (int num) – Returns a random number in the range 0 to num -1. 5 -44
Random Floating Point • float next. Float () – Returns a random number between 0. 0 (inclusive) and 1. 0 (exclusive). 5 -45
//********************************** // Random. Numbers. java Author: Lewis/Loftus // // Demonstrates the creation of pseudo-random numbers using the // Random class. //********************************** import java. util. Random; public class Random. Numbers { //--------------------------------// Generates random numbers in various ranges. //--------------------------------public static void main (String[] args) { Random generator = new Random(); int num 1, num 2; num 1 = generator. next. Int(10); System. out. println ("From 0 to 9: " + num 1); continued 5 -46 Copyright © 2012 Pearson Education, Inc.
continued num 1 = generator. next. Int(10) + 1; System. out. println ("From 1 to 10: " + num 1); num 1 = generator. next. Int(15) + 20; System. out. println ("From 20 to 34: " + num 1); num 1 = generator. next. Int(20) - 10; System. out. println ("From -10 to 9: " + num 1); num 2 = generator. next. Float(); System. out. println ("A random float (between 0 -1): " + num 2); num 2 = generator. next. Float() * 6; // 0. 0 to 5. 999999 num 1 = (int)num 2 + 1; System. out. println ("From 1 to 6: " + num 1); } } 5 -47 Copyright © 2012 Pearson Education, Inc.
Exercise • Write a program that simulates the rolling of a pair of dice. For each die in the pair, the program should generate a random number between 1 and 6 (inclusive). • It should print out the result of the roll for each die and the total roll (the sum of the two dice) 5 -48
Comparing Strings • Remember that in Java a character string is an object • The equals method can be called with strings to determine if two strings contain exactly the same characters in the same order • The equals method returns a boolean result if (name 1. equals(name 2)) System. out. println ("Same name"); else System. out. println(“Not same”); 5 -49
Exercise • Modify the rolling dice program so it allows the user to keep rolling the dice as long as the user enters "yes". 5 -50
Other Repetition Statements: The do Statement 5 -51
The do Statement • A do statement has the following syntax: do { statement; } while ( condition ); There is a semicolon • The statement is executed once initially, and then the condition is evaluated • The statement is executed repeatedly until the condition becomes false 5 -52
Comparing while and do The while Loop The do Loop statement condition evaluated true statement true false condition evaluated false 5 -53
The do Statement • An example of a do loop: int count = 0; do { count++; System. out. println (count); } while (count < 5); • The body of a do loop executes at least once 5 -54
Exercise • Write a program that computes the reverse number of a number entered by the user. For example, the reverse number of 8352 is 2538. 5 -55
Readings and Assignments • Reading: Chapter 5. 1 -5. 4, 2. 4, 3. 4 • Lab Assignment: Java Lab 4 • Self-Assessment Exercises: – Self-Review Questions Section • SR 5. 8, 5. 11, 5. 18, 5. 21 – After Chapter Exercises • EX 5. 2, 5. 4, 5. 8, 5. 9 5 -56
- Slides: 56