Simple Control Structures booleans, the if statement, and the while loop 26-Jul-16 What are control structures? You can’t do very much if your program consists of just a list of commands to be done in order The program cannot choose whether or not to perform a command The program cannot perform the same command more than once Such programs are extremely limited! Control structures allow a program to base its behavior on the values of variables 2 For C and C++ programmers only Statement types are almost identical to those in C and C++ Main difference: true/false conditions must be boolean, not numeric! Some unusual uses of the comma in for statements are not permitted in Java There are two new statement types (try and assert) which we won’t talk about today 3 boolean boolean is one of the eight primitive types There are exactly two boolean values, true (“yes”) and false (“no”) booleans are used to make yes/no decisions All control structures use booleans boolean, true, and false are all lowercase booleans are named after George Boole, the founder of Boolean logic 4 Declaring boolean variables boolean variables are declared like any other kind of variable: boolean hungry; boolean passingGrade; boolean taskCompleted = false; boolean values can be assigned to boolean variables: taskCompleted = true; 5 Numeric comparisons The following numeric comparisons each give a boolean result: x x x x x x <y <= y == y != y >= y >y // // // // // // is is is is is is x x x x x x less than y? less than or equal to y? equal to y? (do not use =) unequal to y? greater than or equal to y? greater than y? Reminder: Don’t use == or != for floating-point numbers 6 The if statement The if statement has the form: if (boolean-expression) statement Examples: if (passingGrade) System.out.println("Whew!"); if (x > largest) largest = x; if (citBook.price < 40.00) citBook.purchase(); The if statement controls one other statement Often this isn’t enough; we want to control a group of statements 7 Compound statements We can use braces to group together several statements into one “compound” statement: { statement; statement; ...; statement; } Braces can group any number of statements: {} // OK--this is an “empty” statement { x = 0; } // OK--braces don’t hurt { temp = x; x = y; y = temp; } //typical use The compound statement is the only kind of statement that does not end with a semicolon 8 The if statement again The if statement controls one other statement, but it can be a compound statement Example: if (cost < amountInPocket) { System.out.println("Spending $" + cost); amountInPocket = amountInPocket - cost; } It’s good style to use braces even if the if statement controls only a single statement: if (cost > amountInPocket) { System.out.println("You can't afford it!"); } • I personally make an exception to this style rule when the controlled statement fits easily on the same line with the if: if (x < 0) x = -x; // use absolute value of x 9 Flowchart for the if statement condition? true statement false 10 The if-else statement The if-else statement chooses which of two statements to execute The if-else statement has the form: if (condition) statement-to-execute-if-true ; else statement-to-execute-if-false ; Either statement (or both) may be a compound statement Notice the semicolon after each controlled statement 11 Example if-else statements if (x >= 0) absX = x; else absX = -x; if (itemCost <= bankBalance) { writeCheck(itemCost); bankBalance = bankBalance - itemCost; } else { callHome(); askForMoreMoney(2 * itemCost); } 12 Flowchart for the if-else statement true statement-1 condition? false statement-2 13 Aside: the “mod” operator The modulo, or “mod,” operator returns the remainder of an integer division The symbol for this operation is % Examples: 57 % 10 gives 7 20 % 6 gives 2 Useful rule: x is divisible by y if x % y == 0 If the left operand is negative, the result is negative (or zero) Examples: -20 % 3 = -2, 20 % -3 = 2, -20 % -3 = -2 14 Nesting if (or if-then) statements A year is a leap year if it is divisible by 4 but not by 100, unless it is also divisible by 400 if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) leapYear = true; else leapYear = false; } else leapYear = true; } else leapYear = false; 15 Operations on booleans Assume p and q are booleans There are four basic operations on booleans: Negation (“not”): !p is true if p is false (and false otherwise) Conjunction (“and”): p && q is true if both p and q are true Disjunction (“or”): p || q is true if either of p and q is true Exclusive or (“xor”): p^q is true if just one of p and q is true 16 Simpler tests A simpler leap-year test: if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) leapYear = true; else leapYear = false; An even simpler leap-year test: leapYear = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); 17 The while loop This is the form of the while loop: while (condition) statement ; If the condition is true, the statement is executed, then the whole thing is done again The statement is executed repeatedly until the condition becomes false If the condition starts out false, the statement is never executed at all 18 Flowchart for the while loop condition? true statement false 19 Countdown example seconds = 5; while (seconds > 0) { System.out.print(seconds + "..."); seconds = seconds - 1; } System.out.println("Blast off!"); Result: 5...4...3...2...1...Blast off! 20 The End “640K ought to be enough for anybody.” --Bill Gates, 1981 21