1 - Michigan State University

1 - Michigan State University

1 5 Control Statements: Part 2 1992-2007 Pearson Education, Inc. All rights reserved. 2 Not everything that can be counted counts, and not every thing that counts can be counted. Albert Einstein Who can control his fate? William Shakespeare The used key is always bright. Benjamin Franklin Intelligence is the faculty of making artificial objects, especially tools to make tools. Henri Bergson Every advantage in the past is judged in the light of the final issue. Demosthenes

1992-2007 Pearson Education, Inc. All rights reserved. 3 OBJECTIVES In this chapter you will learn: The essentials of counter-controlled repetition. To use the for and dowhile repetition statements to execute statements in a program repeatedly. To understand multiple selection using the switch selection statement. To use the break and continue program control statements to alter the flow of control. To use the logical operators to form complex conditional expressions in control statements. 1992-2007 Pearson Education, Inc. All rights reserved. 4 5.1 Introduction 5.2

Essentials of Counter-Controlled Repetition 5.3 for Repetition Statement 5.4 Examples Using the for Statement 5.5 dowhile Repetition Statement 5.6 switch Multiple-Selection Statement 5.7 break and continue Statements 5.8 Logical Operators

5.9 Structured Programming Summary 5.10 (Optional) GUI and Graphics Case Study: Drawing Rectangles and Ovals 5.11 (Optional) Software Engineering Case Study: Identifying Objects States and Activities 5.12 Wrap-Up 1992-2007 Pearson Education, Inc. All rights reserved. 5 5.1 Introduction Continue structured-programming discussion Introduce Javas remaining control structures for, dowhile, switch

1992-2007 Pearson Education, Inc. All rights reserved. 5.2 Essentials of Counter-Controlled Repetition 6 Counter-controlled repetition requires: Control variable (loop counter) Initial value of the control variable Increment/decrement of control variable through each loop Loop-continuation condition that tests for the final value of the control variable 1992-2007 Pearson Education, Inc. All rights reserved. 1 // Fig. 5.1: WhileCounter.java 2 // Counter-controlled repetition with the while repetition statement. 3

4 public class WhileCounter 5 { 6 public static void main( String args[] ) 7 { Outline 7 WhileCounter.java int counter = 1; // declare and initialize control variable 8 9

Control-variable name is counter 10 while ( counter <= 10 ) // loop-continuation condition 11 { Control-variable initial value is 1 System.out.printf( "%d 12 ", counter ); ++counter; // increment control variable Condition by 1 13 } // end while 14

15 tests for counters final value Increment System.out.println(); // output a newline 16 for counter } // end main 17 18 } // end class WhileCounter 1 2 3 4 5

6 7 8 9 10 1992-2007 Pearson Education, Inc. All rights reserved. 8 Common Programming Error 5.1 Because floating-point values may be approximate, controlling loops with floatingpoint variables may result in imprecise counter values and inaccurate termination tests. 1992-2007 Pearson Education, Inc. All rights reserved. 9 Error-Prevention Tip 5.1

Control counting loops with integers. 1992-2007 Pearson Education, Inc. All rights reserved. 10 Good Programming Practice 5.1 Place blank lines above and below repetition and selection control statements, and indent the statement bodies to enhance readability. 1992-2007 Pearson Education, Inc. All rights reserved. 11 Software Engineering Observation 5.1 Keep it simple remains good advice for most of the code you will write. 1992-2007 Pearson Education, Inc. All rights reserved. 12 5.3 for Repetition Statement Handles counter-controlled-repetition details

1992-2007 Pearson Education, Inc. All rights reserved. 1 // Fig. 5.2: ForCounter.java 2 3 4 // Counter-controlled repetition with the for repetition statement. 5 6 7 8 9 { public class ForCounter public static void main( String args[] ) { // for statement header includes initialization, // loop-continuation condition and increment

ForCounter.java Line 10 int counter = 1; for ( int counter = 1; counter <= 10; counter++ ) System.out.printf( "%d ", counter ); 10 11 12 13 14 Line 10 counter <= 10; System.out.println(); // output a newline } // end main 15 } // end class ForCounter Control-variable 1 Outline

13 2 3 4 5 6 7 8 Line 10 counter++; name is counter 9 10 Control-variable initial value is 1 Increment for counter

Condition tests for counters final value 1992-2007 Pearson Education, Inc. All rights reserved. 14 Common Programming Error 5.2 Using an incorrect relational operator or an incorrect final value of a loop counter in the loop-continuation condition of a repetition statement can cause an off-by-one error. 1992-2007 Pearson Education, Inc. All rights reserved. 15 Good Programming Practice 5.2 Using the final value in the condition of a while or for statement and using the <= relational operator helps avoid off-by-one errors. For a loop that prints the values 1 to 10, the loop-continuation condition should be counter <= 10 rather than counter < 10 (which causes an off-by-one error) or counter <

11 (which is correct). Many programmers prefer socalled zero-based counting, in which to count 10 times, counter would be initialized to zero and the loop-continuation test would be counter < 10. 1992-2007 Pearson Education, Inc. All rights reserved. 16 Fig. 5.3 | for statement header components. 1992-2007 Pearson Education, Inc. All rights reserved. 17 5.3 for Repetition Statement (Cont.) for ( initialization; loopContinuationCondition; increment ) statement; can usually be rewritten as: initialization; while ( loopContinuationCondition ) { statement; increment; } 1992-2007 Pearson Education, Inc. All rights reserved.

18 Common Programming Error 5.3 Using commas instead of the two required semicolons in a for header is a syntax error. 1992-2007 Pearson Education, Inc. All rights reserved. 19 Common Programming Error 5.4 When a for statements control variable is declared in the initialization section of the fors header, using the control variable after the fors body is a compilation error. 1992-2007 Pearson Education, Inc. All rights reserved. 20 Performance Tip 5.1 There is a slight performance advantage to preincrementing, but if you choose to postincrement because it seems more natural (as in a for header), optimizing compilers will

generate Java bytecode that uses the more efficient form anyway. 1992-2007 Pearson Education, Inc. All rights reserved. 21 Good Programming Practice 5.3 In the most cases, preincrementing and postincrementing are both used to add 1 to a variable in a statement by itself. In these cases, the effect is exactly the same, except that preincrementing has a slight performance advantage. Given that the compiler typically optimizes your code to help you get the best performance, use the idiom with which you feel most comfortable in these situations. 1992-2007 Pearson Education, Inc. All rights reserved. 22 Common Programming Error 5.5 Placing a semicolon immediately to the right of the right parenthesis of a for header makes that fors body an empty statement. This is

normally a logic error. 1992-2007 Pearson Education, Inc. All rights reserved. 23 Error-Prevention Tip 5.2 Infinite loops occur when the loop-continuation condition in a repetition statement never becomes false. To prevent this situation in a countercontrolled loop, ensure that the control variable is incremented (or decremented) during each iteration of the loop. In a sentinel-controlled loop, ensure that the sentinel value is eventually input. 1992-2007 Pearson Education, Inc. All rights reserved. 24 Error-Prevention Tip 5.3 Although the value of the control variable can be changed in the body of a for loop, avoid doing so, because this practice can lead to subtle errors. 1992-2007 Pearson Education, Inc. All rights reserved.

25 Fig. 5.4 | UML activity diagram for the for statement in Fig. 5.2. 1992-2007 Pearson Education, Inc. All rights reserved. 26 5.4 Examples Using the for Statement Varying control variable in for statement Vary control variable from 1 to 100 in increments of 1 for ( int i = 1; i <= 100; i++ ) Vary control variable from 100 to 1 in increments of 1 for ( int i = 100; i >= 1; i-- ) Vary control variable from 7 to 77 in increments of 7 for ( int i = 7; i <= 77; i += 7 ) Vary control variable from 20 to 2 in decrements of 2 for ( int i = 20; i >= 2; i -= 2 ) Vary control variable over the sequence: 2, 5, 8, 11, 14, 17, 20 for ( int i = 2; i <= 20; i += 3 ) Vary control variable over the sequence: 99, 88, 77, 66, 55, 44,

33, 22, 11, 0 for ( int i = 99; i >= 0; i -= 11 ) 1992-2007 Pearson Education, Inc. All rights reserved. 27 Common Programming Error 5.6 Not using the proper relational operator in the loopcontinuation condition of a loop that counts downward (e.g., using i <= 1 instead of i >= 1 in a loop counting down to 1) is usually a logic error. 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5 6 7 8 9 10 11 12

13 14 15 16 // Fig. 5.5: Sum.java // Summing integers with the for statement. Outline public class Sum { public static void main( String args[] ) { int total = 0; // initialize total 28 Sum.java // total even integers from 2 through 20 for ( int number = 2; number <= 20; number += 2 ) total += number; Line 11

System.out.printf( "Sum is %d\n", total ); // display results } // end main } // end class Sum Sum is 110 increment number by 2 each iteration 1992-2007 Pearson Education, Inc. All rights reserved. 5.4 Examples Using the for Statement (Cont.) 29 Initialization and increment expression can be comma-separated lists of expressions E.g., lines 11-12 of Fig. 5.5 can be rewritten as for ( int number = 2; number <= 20; total += number, number += 2 ) ; // empty statement 1992-2007 Pearson Education, Inc. All rights reserved. 30 Good Programming Practice 5.4

Limit the size of control statement headers to a single line if possible. 1992-2007 Pearson Education, Inc. All rights reserved. 31 Good Programming Practice 5.5 Place only expressions involving the control variables in the initialization and increment sections of a for statement. Manipulations of other variables should appear either before the loop (if they execute only once, like initialization statements) or in the body of the loop (if they execute once per iteration of the loop, like increment or decrement statements). 1992-2007 Pearson Education, Inc. All rights reserved. 1 // Fig. 5.6: Interest.java 2 // Compound-interest calculations with for.

Outline 3 4 public class Interest 5 { 6 public static void main( String 7 { Java treats literal values with points as type args[]decimal ) double

8 double amount; // amount on deposit at end of each year 9 double principal = 1000.0; // initial amount before interest 10 double rate = 0.05; // interest rate 11 32 Interest.java (1 of 2) Line 8 12 // display headers

13 System.out.printf( "%s%20s\n", "Year", "Amount on deposit" ); 14 Line 13 Second string is right justified and displayed with a field width of 20 1992-2007 Pearson Education, Inc. All rights reserved. 15 // calculate amount on deposit for each of ten years 16 for ( int year = 1; year <= 10; year++ ) 17 { Outline

18 // calculate new amount for specified year 19 amount = principal * Math.pow( 1.0 + rate, year ); 20 // display the year and the amount 22 System.out.printf( "%4d%,20.2f\n", year, amount ); 24 } // end for } // end main 25 } // end class Interest Year 1 2 3

4 5 6 7 8 9 10 Amount on deposit 1,050.00 1,102.50 1,157.63 1,215.51 1,276.28 1,340.10 1,407.10 1,477.46 1,551.33 1,628.89 Calculate amount with for statement Interest.java 21 23

33 (2 of 2) Use the comma (,) formatting flag to display the amount with a thousands separator Lines 16-23 Line 22 Program output 1992-2007 Pearson Education, Inc. All rights reserved. 5.4 Examples Using the for Statement (Cont.) 34 Formatting output Field width Minus sign (-) formatting flag for left justification Comma (,) formatting flag to output numbers with grouping separators static method

ClassName.methodName( arguments) 1992-2007 Pearson Education, Inc. All rights reserved. 35 Good Programming Practice 5.6 Do not use variables of type double (or float) to perform precise monetary calculations. The imprecision of floating-point numbers can cause errors that will result in incorrect monetary values. In the exercises, we explore the use of integers to perform monetary calculations. [Note: Some thirdparty vendors provide for-sale class libraries that perform precise monetary calculations. In addition, the Java API provides class java.math.BigDecimal for performing calculations with arbitrary precision floating-point values.] 1992-2007 Pearson Education, Inc. All rights reserved. 36 Performance Tip 5.2 In loops, avoid calculations for which the result never changes such calculations should typically be placed before the loop. [Note: Many of todays sophisticated optimizing compilers

will place such calculations outside loops in the compiled code.] 1992-2007 Pearson Education, Inc. All rights reserved. 37 5.5 dowhile Repetition Statement dowhile statement Similar to while statement Tests loop-continuation after performing body of loop i.e., loop body always executes at least once 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5 6 7 8 9 10 11

12 13 14 15 16 17 18 1 // Fig. 5.7: DoWhileTest.java // do...while repetition statement. Outline public class DoWhileTest Declares and initializes { control variable counter public static void main( String args[] ) { int counter = 1; // initialize counter Variable counters value is Line 8 System.out.printf( "%d ", counter );

++counter; } while ( counter <= 10 ); // end do...while System.out.println(); // outputs a newline } // end main } // end class DoWhileTest 3 4 DoWhileTest.java displayed before testing counters final value do { 2 38 5 6 7

8 9 10 Lines 10-14 Program output 1992-2007 Pearson Education, Inc. All rights reserved. 39 Fig. 5.8 | do...while repetition statement UML activity diagram. 1992-2007 Pearson Education, Inc. All rights reserved. 40 Good Programming Practice 5.7 Always include braces in a do...while statement, even if they are not necessary. This helps eliminate ambiguity between the while statement and a do...while statement

containing only one statement. 1992-2007 Pearson Education, Inc. All rights reserved. 41 5.6 switch Multiple-Selection Statement switch statement Used for multiple selections 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16 17 18 19 20 21 22 23 24 25 26 27 28 // Fig. 5.9: GradeBook.java // GradeBook class uses switch statement to count A, B, C, D and F grades. import java.util.Scanner; // program uses class Scanner public class GradeBook { private String courseName; // name of course this GradeBook represents private int total; // sum of grades private int gradeCounter; // number of grades entered private int aCount; // count of A grades private int bCount; // count of B grades private int cCount; // count of C grades

private int dCount; // count of D grades private int fCount; // count of F grades Outline 42 GradeBook.java (1 of 5) Lines 8-14 // constructor initializes courseName; // int instance variables are initialized to 0 by default public GradeBook( String name ) { courseName = name; // initializes courseName } // end constructor // method to set the course name public void setCourseName( String name ) { courseName = name; // store the course name } // end method setCourseName 1992-2007 Pearson Education, Inc. All rights reserved.

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

55 // method to retrieve the course name public String getCourseName() { return courseName; } // end method getCourseName Outline // display a welcome message to the GradeBook user public void displayMessage() { // getCourseName gets the name of the course System.out.printf( "Welcome to the grade book for\n%s!\n\n", getCourseName() ); } // end method displayMessage 43 GradeBook.java (2 of 5) Lines 50-54

// input arbitrary number of grades from user public void inputGrades() { Scanner input = new Scanner( System.in ); Display prompt int grade; // grade entered by user System.out.printf( "%s\n%s\n %s\n %s\n", "Enter the integer grades in the range 0-100.", "Type the end-of-file indicator to terminate input:", "On UNIX/Linux/Mac OS X type d then press Enter", "On Windows type z then press Enter" ); 1992-2007 Pearson Education, Inc. All rights reserved. 56 57 58 59 60 61 62 63

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 // loop until user enters the end-of-file indicator while ( input.hasNext() ) { grade = input.nextInt(); // read grade total += grade; // add grade to totalLoop condition uses method hasNext to ++gradeCounter; // increment numberdetermine

of grades whether there is more data to input Outline 44 GradeBook.java // call method to increment appropriate counter incrementLetterGradeCounter( grade ); } // end while } // end method inputGrades (3 of 5) // add 1 to appropriate counter for specified grade public void incrementLetterGradeCounter( int numericGrade ) { (grade / 10 ) is // determine which grade was entered switch ( grade / 10 ) controlling expression { case 9: // grade was between 90 switch statement determines case 10: // and 100

which case label to execute, ++aCount; // increment aCount depending on controlling expression break; // necessary to exit switch Line 57 Line 72 controlling expression Lines 72-94 case 8: // grade was between 80 and 89 ++bCount; // increment bCount break; // exit switch 1992-2007 Pearson Education, Inc. All rights reserved. 83 84 85 86 87 88 89 90 91 92

93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 case 7: // grade was between 70 and 79 ++cCount; // increment cCount break; // exit switch Outline case 6: // grade was between 60 and 69 ++dCount; // increment dCount break; // exit switch

45 GradeBook.java default: // grade was less than 60 ++fCount; // increment fCount break; // optional; will exit switch anyway } // end switch default case for grade less } // end method incrementLetterGradeCounter (4 of 5) than 60 Line 91 default case // display a report based on the grades entered by user public void displayGradeReport() { System.out.println( "\nGrade Report:" ); // if user entered at least one grade... if ( gradeCounter != 0 ) { // calculate average of all grades entered double average = (double) total / gradeCounter; 1992-2007 Pearson Education, Inc. All rights reserved.

108 // output summary of results 109 System.out.printf( "Total of the %d grades entered is %d\n", 110 gradeCounter, total ); 111 System.out.printf( "Class average is %.2f\n", average ); 112 System.out.printf( "%s\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n", 113 "Number of students who received each grade:", 114

"A: ", aCount, // display number of A grades 115 "B: ", bCount, // display number of B grades 116 "C: ", cCount, // display number of C grades 117 "D: ", dCount, // display number of D grades 118 "F: ", fCount ); // display number of F grades

119 } // end if 120 else // no grades were entered, so output appropriate message 121 122 Outline 46 GradeBook.java (5 of 5) System.out.println( "No grades were entered" ); } // end method displayGradeReport 123 } // end class GradeBook 1992-2007 Pearson Education, Inc. All rights reserved.

47 Portability Tip 5.1 The keystroke combinations for entering end-of-file are system dependent. 1992-2007 Pearson Education, Inc. All rights reserved. 48 Common Programming Error 5.7 Forgetting a break statement when one is needed in a switch is a logic error. 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 // Fig. 5.10: GradeBookTest.java // Create GradeBook object, input grades and display grade report. 3 4 public class GradeBookTest 5 {

6 public static void main( String args[] ) 7 { 8 // create GradeBook object myGradeBook and 9 // pass course name to constructor 10 GradeBook myGradeBook = new GradeBook( 11 12 13 14 15 "CS101 Introduction to Java Programming" ); Outline 49 GradeBookTest.java Call GradeBook public(1 of 2) methods to count grades

myGradeBook.displayMessage(); // display welcome message myGradeBook.inputGrades(); // read grades from user myGradeBook.displayGradeReport(); // display report based on grades Lines 13-15 16 } // end main 17 } // end class GradeBookTest 1992-2007 Pearson Education, Inc. All rights reserved. Welcome to the grade book for CS101 Introduction to Java Programming! Enter the integer grades in the range 0-100. Type the end-of-file indicator to terminate input: On UNIX/Linux/Mac OS X type d then press Enter On Windows type z then press Enter 99 92 45 57 63 71 76

85 90 100 ^Z Outline 50 GradeBookTest.java (2 of 2) Program output Grade Report: Total of the 10 grades entered is 778 Class average is 77.80 Number of students who received each grade: A: 4 B: 1 C: 2 D: 1 F: 2 1992-2007 Pearson Education, Inc. All rights reserved.

51 Software Engineering Observation 5.2 Provide a default case in switch statements. Including a default case focuses you on the need to process exceptional conditions. 1992-2007 Pearson Education, Inc. All rights reserved. 52 Fig. 5.11 | switch multiple-selection statement UML activity diagram with break statements. 1992-2007 Pearson Education, Inc. All rights reserved. 53 Good Programming Practice 5.8 Although each case and the default case in a switch can occur in any order, place the default case last. When the default case is listed last, the break for that case is not required. Some programmers include this break for clarity and symmetry with other cases.

1992-2007 Pearson Education, Inc. All rights reserved. 5.6 switch Multiple-Selection Statement (Cont.) 54 Expression in each case Constant integral expression Combination of integer constants that evaluates to a constant integer value Character constant E.g., A, 7 or $ Constant variable Declared with keyword final 1992-2007 Pearson Education, Inc. All rights reserved. 55 5.7 break and continue Statements break/continue Alter flow of control

break statement Causes immediate exit from control structure Used in while, for, dowhile or switch statements continue statement Skips remaining statements in loop body Proceeds to next iteration Used in while, for or dowhile statements 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16 17 18 19 // Fig. 5.12: BreakTest.java // break statement exiting a for statement. public class BreakTest { public static void main( String args[] ) Loop 10 times { int count; // control variable also used after Exitloop for terminates statement (break) when count equals 5 for ( count = 1; count <= 10; count++ ) // loop 10 times { if ( count == 5 ) // if count is 5, break; // terminate loop

Outline 56 BreakTest.java Line 9 Lines 11-12 System.out.printf( "%d ", count ); } // end for System.out.printf( "\nBroke out of loop at count = %d\n", count ); } // end main } // end class BreakTest 1 2 3 4 Broke out of loop at count = 5 Program output 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5

6 7 8 9 10 11 12 13 14 15 16 17 // Fig. 5.13: ContinueTest.java // continue statement terminating an iteration of a for statement. public class ContinueTest { Loop 10 times public static void main( String args[] ) { Skip line and proceed to for ( int count = 1; count <= 10; count++ ) // loop 10 12

times { line 7 when count equals 5 if ( count == 5 ) // if count is 5, continue; // skip remaining code in loop System.out.printf( "%d ", count ); } // end for Outline 57 ContinueTest.java Line 7 Lines 9-10 System.out.println( "\nUsed continue to skip printing 5" ); } // end main } // end class ContinueTest 1 2 3 4 6 7 8 9 10 Used continue to skip printing 5 Program output

1992-2007 Pearson Education, Inc. All rights reserved. 58 Software Engineering Observation 5.3 Some programmers feel that break and continue violate structured programming. Since the same effects are achievable with structured programming techniques, these programmers do not use break or continue. 1992-2007 Pearson Education, Inc. All rights reserved. 59 Software Engineering Observation 5.4 There is a tension between achieving quality software engineering and achieving the bestperforming software. Often, one of these goals is achieved at the expense of the other. For all but the most performance-intensive situations, apply the following rule of thumb: First, make your code simple and correct; then make it fast and small, but only if necessary. 1992-2007 Pearson Education, Inc. All rights reserved.

60 5.8 Logical Operators Logical operators Allows for forming more complex conditions Combines simple conditions Java logical operators && (conditional AND) || (conditional OR) & (boolean logical AND) | ^ (boolean logical inclusive OR) ! (logical NOT) (boolean logical exclusive OR) 1992-2007 Pearson Education, Inc. All rights reserved. 61

5.8 Logical Operators (Cont.) Conditional AND (&&) Operator Consider the following if statement if ( gender == FEMALE && age >= 65 ) ++seniorFemales; Combined condition is true if and only if both simple conditions are true Combined condition is false if either or both of the simple conditions are false 1992-2007 Pearson Education, Inc. All rights reserved. 62 expression1 expression2 expression1 && expression2 false false true true false true false

true False False False True Fig. 5.14 | && (conditional AND) operator truth table. 1992-2007 Pearson Education, Inc. All rights reserved. 63 5.8 Logical Operators (Cont.) Conditional OR (||) Operator Consider the following if statement if ( ( semesterAverage >= 90 ) || ( finalExam >= 90 ) System.out.println( Student grade is A ); Combined condition is true if either or both of the simple condition are true Combined condition is false if both of the simple conditions are false 1992-2007 Pearson Education, Inc. All rights reserved.

64 expression1 expression2 expression1 || expression2 false false true true false true false true false true true true Fig. 5.15 | || (conditional OR) operator truth table.

1992-2007 Pearson Education, Inc. All rights reserved. 65 5.8 Logical Operators (Cont.) Short-Circuit Evaluation of Complex Conditions Parts of an expression containing && or || operators are evaluated only until it is known whether the condition is true or false E.g., ( gender == FEMALE ) && ( age >= 65 ) Stops immediately if gender is not equal to FEMALE 1992-2007 Pearson Education, Inc. All rights reserved. 66 Common Programming Error 5.8 In expressions using operator &&, a condition we will call this the dependent condition may require another condition to be true for the evaluation of the dependent condition to be meaningful. In this case, the dependent condition should be placed after the other condition, or an error might occur. For example, in the expression ( i != 0 ) && ( 10 / i == 2 ), the second condition must

appear after the first condition, or a divideby-zero error might occur. 1992-2007 Pearson Education, Inc. All rights reserved. 67 5.8 Logical Operators (Cont.) Boolean Logical AND (&) Operator Works identically to && Except & always evaluate both operands Boolean Logical OR (|) Operator Works identidally to || Except | always evaluate both operands 1992-2007 Pearson Education, Inc. All rights reserved. 68 Error-Prevention Tip 5.4 For clarity, avoid expressions with side effects in conditions. The side effects may look clever, but they can make it harder to understand code and can lead to subtle logic errors. 1992-2007 Pearson Education, Inc. All rights reserved.

69 5.8 Logical Operators (Cont.) Boolean Logical Exclusive OR (^) One of its operands is true and the other is false Evaluates to true Both operands are true or both are false Evaluates to false Logical Negation (!) Operator Unary operator 1992-2007 Pearson Education, Inc. All rights reserved. 70 expression1 expression2 expression1 ^ expression2 false false true

true false true false true false true true false Fig. 5.16 | ^ (boolean logical exclusive OR) operator truth table. 1992-2007 Pearson Education, Inc. All rights reserved. 71 expression !expression false true true

false Fig. 5.17 |! (logical negation, or logical NOT) operator truth table. 1992-2007 Pearson Education, Inc. All rights reserved. 1 // Fig. 5.18: LogicalOperators.java 2 // Logical operators. Outline 3 4 public class LogicalOperators 5 { 6

public static void main( String args[] ) 7 { 72 LogicalOperators. java 8 // create truth table for && (conditional AND) operator 9 System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 10 "Conditional AND (&&)", "false && false", ( false && false ), 11

"false && true", ( false && true ), 12 "true && false", ( true && false ), 13 "true && true", ( true && true ) ); (1 of 3) Lines 9-13 Conditional AND truth table 14 15 // create truth table for || (conditional OR) operator 16 System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 17 "Conditional OR (||)", "false || false", ( false || false ),

18 "false || true", ( false || true ), 19 "true || false", ( true || false ), 20 "true || true", ( true || true ) ); Lines 16-20 Lines 23-27 Conditional OR truth table 21 22 // create truth table for & (boolean logical AND) operator 23

System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 24 "Boolean logical AND (&)", "false & false", ( false & false ), 25 "false & true", ( false & true ), 26 "true & false", ( true & false ), 27 "true & true", ( true & true ) ); 28 Boolean logical AND truth table 1992-2007 Pearson Education, Inc. All rights reserved. 29

// create truth table for | (boolean logical inclusive OR) operator 30 31 32 33 System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "Boolean logical inclusive OR (|)", "false | false", ( false | false ), "false | true", ( false | true ), 34 35 36 37 38 39 40 41 42 43 44 45

Outline 73 Boolean logical inclusive OR LogicalOperators. truth table java "true | false", ( true | false ), "true | true", ( true | true ) ); // create truth table for ^ (boolean logical exclusive OR) operator System.out.printf( "%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", "Boolean logical exclusive OR (^)", "false ^ false", ( false ^ false ), "false ^ true", ( false ^ true ), "true ^ false", ( true ^ false ), "true ^ true", ( true ^ true ) ); (2 of 3) Lines 30-35 Boolean logical exclusive

OR truth table Lines 38-43 // create truth table for ! (logical negation) operator 46 System.out.printf( "%s\n%s: %b\n%s: %b\n", "Logical NOT (!)", 47 "!false", ( !false ), "!true", ( !true ) ); 48 } // end main 49 } // end class LogicalOperators Lines 46-47 Logical negation truth table 1992-2007 Pearson Education, Inc. All rights reserved. Conditional AND (&&) false && false: false false && true: false true && false: false true && true: true Conditional OR (||) false || false: false false || true: true

true || false: true true || true: true Boolean logical AND (&) false & false: false false & true: false true & false: false true & true: true Outline 74 LogicalOperators. java (3 of 3) Program output Boolean logical inclusive OR (|) false | false: false false | true: true true | false: true true | true: true Boolean logical exclusive OR (^) false ^ false: false false ^ true: true

true ^ false: true true ^ true: false Logical NOT (!) !false: true !true: false 1992-2007 Pearson Education, Inc. All rights reserved. 75 Operators Associativity Type ++ ++ * + < == & ^ | && || ?:

= right to left right to left left to right left to right left to right left to right left to right left to right left to right left to right left to right right to left right to left -/ <= != += + % -

> >= -= *= ! (type) /= %= unary postfix unary prefix multiplicative additive relational equality boolean logical AND boolean logical exclusive OR boolean logical inclusive OR

conditional AND conditional OR conditional assignment Fig. 5.19 | Precedence/associativity of the operators discussed so far. 1992-2007 Pearson Education, Inc. All rights reserved. 76 5.9 Structured Programming Summary Sequence structure built-in to Java Selection structure if, ifelse and switch Repetition structure while, dowhile and for 1992-2007 Pearson Education, Inc. All rights reserved. 77 Fig. 5.20 | Javas single-entry/single-exit sequence, selection and

repetition statements. 1992-2007 Pearson Education, Inc. All rights reserved. 78 Rules for Forming Structured Programs 1 Begin with the simplest activity diagram (Fig. 5.22). 2 Any action state can be replaced by two action states in sequence. 3 Any action state can be replaced by any control statement (sequence of action states, if, ifelse, switch, while, dowhile or for). 4 Rules 2 and 3 can be applied as often as you like and in any order. Fig. 5.21 | Rules for forming structured programs.

1992-2007 Pearson Education, Inc. All rights reserved. 79 Fig. 5.22 | Simplest activity diagram. 1992-2007 Pearson Education, Inc. All rights reserved. 80 Fig. 5.23 | Repeatedly applying the stacking rule (rule 2) of Fig. 5.21 to the simplest activity diagram. 1992-2007 Pearson Education, Inc. All rights reserved. 81 Fig. 5.24 | Repeatedly applying the nesting rule (rule 3) of Fig. 5.21 to the simplest activity diagram. 1992-2007 Pearson Education, Inc. All rights reserved. 82

Fig. 5.25 | Unstructured activity diagram. 1992-2007 Pearson Education, Inc. All rights reserved. 5.10 (Optional) GUI and Graphics Case Study: Drawing Rectangles and Ovals 83 Draw rectangles Method drawRect of Graphics Draw ovals Method drawOval of Graphics 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5 6 7 8

9 10 11 12 13 14 15 16 17 18 19 20 // Fig. 5.26: Shapes.java // Demonstrates drawing different shapes. import java.awt.Graphics; import javax.swing.JPanel; Outline public class Shapes extends JPanel { private int choice; // user's choice of which shape to draw 84

Shapes.java (1 of 2) // constructor sets the user's choice public Shapes( int userChoice ) { choice = userChoice; } // end Shapes constructor // draws a cascade of shapes starting from the top left corner public void paintComponent( Graphics g ) { super.paintComponent( g ); 1992-2007 Pearson Education, Inc. All rights reserved. 21 22 23 24 25 26 27 28 29

for ( int i = 0; i < 10; i++ ) { // pick the shape based on the user's choice Outline 85 switch ( choice ) { case 1: // draw rectangles g.drawRect( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; 30 case 2: // draw ovals 31 g.drawOval( 10 + i * 10, 10 + i * 10, 32 50 + i * 10, 50 + i * 10 ); 33 break; 34 } // end switch 35

} // end for 36 } // end method paintComponent 37 } // end class Shapes Shapes.java Draw rectangles (2 of 2) Lines 27-28 Draw ovals Lines 31-32 1992-2007 Pearson Education, Inc. All rights reserved. 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // Fig. 5.27: ShapesTest.java // Test application that displays class Shapes. import javax.swing.JFrame; import javax.swing.JOptionPane; Outline

86 ShapesTest.java public class ShapesTest { public static void main( String args[] ) { // obtain user's choice String input = JOptionPane.showInputDialog( "Enter 1 to draw rectangles\n" + "Enter 2 to draw ovals" ); (1 of 2) int choice = Integer.parseInt( input ); // convert input to int // create the panel with the user's input Shapes panel = new Shapes( choice ); JFrame application = new JFrame(); // creates a new JFrame application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); application.add( panel ); // add the panel to the frame application.setSize( 300, 300 ); // set the desired size application.setVisible( true ); // show the frame } // end main } // end class ShapesTest

1992-2007 Pearson Education, Inc. All rights reserved. Outline 87 ShapesTest.java (2 of 2) Program output 1992-2007 Pearson Education, Inc. All rights reserved. 88 Fig. 5.28 | Drawing concentric circles. 1992-2007 Pearson Education, Inc. All rights reserved. 89 5.11 (Optional) Software Engineering Case Study: Identifying Objects State and Activities State Machine Diagrams Commonly called state diagram Model several states of an object

Show under what circumstances the object changes state Focus on system behavior UML representation State Rounded rectangle Initial state Solid circle Transitions Arrows with stick arrowheads 1992-2007 Pearson Education, Inc. All rights reserved. 90 Fig. 5.29 | State diagram for the ATM object. 1992-2007 Pearson Education, Inc. All rights reserved. 91 Software Engineering Observation 5.5 Software designers do not generally create state diagrams showing every possible state and state transition for all attributesthere are simply too many of them. State diagrams typically show only key states and state transitions.

1992-2007 Pearson Education, Inc. All rights reserved. 5.11 (Optional) Software Engineering Case Study (Cont.) 92 Activity Diagrams Focus on system behavior Model an objects workflow during program execution Model the actions the object will perform and in what order UML representation Action state ( rectangle with its left and right sides replaced by arcs curving outwards) Action order ( arrow with a stick arrowhead) Initial state (solid circle) Final state (solid circle enclosed in an open circle) 1992-2007 Pearson Education, Inc. All rights reserved. 93 Fig. 5.30 | Activity diagram for a BalanceInquiry object.

1992-2007 Pearson Education, Inc. All rights reserved. 94 Fig. 5.31 | Activity diagram for a withdrawal transaction. 1992-2007 Pearson Education, Inc. All rights reserved. 95 Fig. 5.32 | Activity diagram for a deposit transaction. 1992-2007 Pearson Education, Inc. All rights reserved.

Recently Viewed Presentations

  • Molar Relationships - BlueDomino

    Molar Relationships - BlueDomino

    A. 0.500 mole B. 1.00 mole C. 2.00 moles D. 4.00 moles The End Molar Relationships The pH of a 0.1 molar aqueous solution of HCl would equal — A -1 B 1 C 11 D 13 If 3.50 g...
  • St. Joseph High School - GRADUATION 2016

    St. Joseph High School - GRADUATION 2016

    St. Joseph High School Graduation 2016 Eligibility for Graduation To be eligible to participate in Graduation, a student must: Have at least 19 credits before entering the final semester. Be registered in Semester 2 for enough courses that total at...
  • Introduction to Operations Management-Chapter 1

    Introduction to Operations Management-Chapter 1

    Request for further information should be addressed to the Permissions Department, John Wiley & Sons, Inc. The purchaser may make back-up copies for his/her own use only and not for distribution or resale.
  • Metric Conversion - Thomas County Schools

    Metric Conversion - Thomas County Schools

    Kilometer km Hectometer hm Dekameter dkm Meter m Decimeter dm Centimeter cm Millimeter mm The standard unit of length is the meter. Length Larger Kilogram kg Hectogram hg Dekagram dkg Gram g Decigram dg Centigram cg Milligram mg The standard...
  • The End of the Cold War SS6H7 The

    The End of the Cold War SS6H7 The

    1945 was the beginning of a long period of distrust & misunderstanding between the Soviet Union and its former allies in the West (particularly ... The US would back one side, with the USSR backing the other. This is also...
  • Pie Corbett grammar games - WordPress.com

    Pie Corbett grammar games - WordPress.com

    On top of the counter was a huge tank where a fish swam round. The girl chose an animal to buy. ... He ran as he did so a hand snatched at his shirt and grabbed him lashing out with...
  • The 20s: an age of transition

    The 20s: an age of transition

    In "The Great Gatsby" Jay Gatsby is suspected to be a bootlegger and a murderer. And Meyer Wolfshiem is said to have "fixed the World's Series" in 1919. Even Jordan Baker is someone who cheated at playing golf. Illegal gambling...
  • Indefinite Pronouns - University of West Florida

    Indefinite Pronouns - University of West Florida

    If either of the two students is caught cheating again, he will be suspended for three weeks. Practicing More Indefinite Pronouns Several of the audience members at the circus (was/were) accosted by the juggling platypus. Several of the audience members...