Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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!!"); errorCount++; 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) inventoryError = 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 ) statement1; else statement2; • If the condition is true, statement1 is executed; if the condition is false, statement2 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.NumberFormat; 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.nextInt(); 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; NumberFormat fmt = NumberFormat.getCurrencyInstance(); System.out.println ("Gross earnings: " + fmt.format(pay)); } } 5-16 Logic of an if-else statement condition evaluated true false statement1 statement2 5-17 Exercise • Write an if/else statement that compares the variable age with 65 , adds 1 to the variable seniorCitizens if age is greater than or equal to 65 , and adds 1 to the variable nonSeniors 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!!"); errorCount++; 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 errorCount++ 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!!"); errorCount++; } 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 (num1 > num2) System.out.println ("greater"); else { if (num1 == num2) 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 = 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 strawsOnCamel , 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.DecimalFormat; 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.nextInt(); 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.nextInt(); } continue 5-37 continue System.out.println (); if (count == 0) System.out.println ("No values were entered."); else { average = (double)sum / count; DecimalFormat fmt = new DecimalFormat ("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 nextInt (int num) – Returns a random number in the range 0 to num -1. 5-44 Random Floating Point • float nextFloat () – Returns a random number between 0.0 (inclusive) and 1.0 (exclusive). 5-45 //******************************************************************** // RandomNumbers.java Author: Lewis/Loftus // // Demonstrates the creation of pseudo-random numbers using the // Random class. //******************************************************************** import java.util.Random; public class RandomNumbers { //----------------------------------------------------------------// Generates random numbers in various ranges. //----------------------------------------------------------------public static void main (String[] args) { Random generator = new Random(); int num1, num2; num1 = generator.nextInt(10); System.out.println ("From 0 to 9: " + num1); continued 5-46 Copyright © 2012 Pearson Education, Inc. continued num1 = generator.nextInt(10) + 1; System.out.println ("From 1 to 10: " + num1); num1 = generator.nextInt(15) + 20; System.out.println ("From 20 to 34: " + num1); num1 = generator.nextInt(20) - 10; System.out.println ("From -10 to 9: " + num1); num2 = generator.nextFloat(); System.out.println ("A random float (between 0-1): " + num2); num2 = generator.nextFloat() * 6; // 0.0 to 5.999999 num1 = (int)num2 + 1; System.out.println ("From 1 to 6: " + num1); } } 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 (name1.equals(name2)) 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 • SR5.8, 5.11, 5.18, 5.21 – After Chapter Exercises • EX 5.2, 5.4, 5.8, 5.9 5-56