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
1 Chapter 4 - Control Structures Part 1 Will not cover 4.14, Thinking About Objects: Identifying Class Attributes 2003 Prentice Hall, Inc. All rights reserved. 2 4.2 Algorithms • Algorithm – A finite set of instructions that specify a sequence of operations to be carried out in order to solve a specific problem or class of problems • Pseudocode – Informal language for writing algorithms – Not executed on computers • Program control: – Means specifying the order in which operations execute – Java control structures are used to specify this order 2003 Prentice Hall, Inc. All rights reserved. 3 4.4 Control Structures • Three control structures can specify order of execution of program statements – Sequential execution: Program statements execute one after the other – Selection structure: Non-sequential execution; transfer of control – Repetition structure: Non-sequential execution; transfer of control • Activity diagram (flowchart) – Models the workflow 2003 Prentice Hall, Inc. All rights reserved. 4 add grade to total Corresponding Java statement: total = total + grade; add 1 to counter Corresponding Java statement: counter = counter + 1; Fig 4.1 Sequence structure activity diagram. 2003 Prentice Hall, Inc. All rights reserved. 5 Ja va Keyw ord s abstract assert boolean break byte case catch char class continue default do double else extends final finally float for if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while Keywords that are reserved, but not currently used const goto Fig. 4.2 Ja va keyw o rd s. 2003 Prentice Hall, Inc. All rights reserved. 6 4.4 Control Structures • Java default control structure provides sequential execution. • Java provides three selection structures – if – If…else – switch • Java provides three repetition structures – while – do…while – do • Each of these words is a Java keyword 2003 Prentice Hall, Inc. All rights reserved. 7 4.5 if Single-Selection Statement • Single-entry/single-exit control structure • Perform action only when condition is true [grade >= 60] print “Passed” [grade < 60] Fig 4.3 if single-selections statement activity diagram. 2003 Prentice Hall, Inc. All rights reserved. 8 4.6 if…else Selection Statement • Perform action only when condition is true • Perform different specified action when condition is false • Nested if…else selection structures [grade < 60] print “Failed” [grade >= 60] print “Passed” Fig 4.4 if…else double-selections statement activity diagram. 2003 Prentice Hall, Inc. All rights reserved. 9 Conditional operator (?:) • Can be used in place of an if…else statement • Takes 3 operands (ternary) operator • example conditional expression: System.out.println (studentGrade >= 60 ? “Passed” : “Failed” ); if condition is true , the output will be Passed , otherwise it will be Failed studentGrade >= 60 ? “Passed” : “Failed” Equivalent to If (studentGrade >= 60 ) expression evaluates to the string “Passed” else expression evaluates to the string “Failed” 2003 Prentice Hall, Inc. All rights reserved. 10 while Repetition Statement 4.7 Repeat action while condition remains true merge decision [product <= 1000] double product value [product > 1000] Corresponding Java statement: product = 2 * product; Fig 4.5 while repetition statement activity diagram. 2003 Prentice Hall, Inc. All rights reserved. 11 Formulating Algorithms: Counter-Controlled Repetition • Counter: Variable that controls number of times set of statements executes • Solution to the class-average problem. Set total to zero Set grade counter to one While grade counter is less than or equal to ten Input the next grade Add the grade into the total Add one to the grade counter Set the class average to the total divided by ten Print the class average Fig. 4.6 Pseudocode algorithm that uses countercontrolled repetition to solve the class-average problem. 2003 Prentice Hall, Inc. All rights reserved. 12 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 29 // Fig. 4.7: Average1.java // Class-average program with counter-controlled repetition. import javax.swing.JOptionPane; Declare variables; gradeCounter is the counter public class Average1 { public { int int int int static void main( String args[] ) total; gradeCounter; grade; average; // // // // sum of grades input by user number of grade to be entered next grade value average of grades Continue looping String gradeString; // grade typed by Outline Average1.java gradeCounter Line 21 as long as gradeCounter is less than or user equal to 10 // initialization phase total = 0; // initialize total gradeCounter = 1; // initialize loop counter // processing phase while ( gradeCounter <= 10 ) { // loop 10 times // prompt for input and read grade from user gradeString = JOptionPane.showInputDialog( "Enter integer grade: " ); // convert gradeString to int grade = Integer.parseInt( gradeString ); 2003 Prentice Hall, Inc. All rights reserved. 13 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 total = total + grade; gradeCounter = gradeCounter + 1; // add grade to total // increment counter } // end while Outline Average1.java // termination phase average = total / 10; // integer division // display average of exam grades JOptionPane.showMessageDialog( null, "Class average is " + average, "Class Average", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminate the program } // end main } // end class Average1 2003 Prentice Hall, Inc. All rights reserved. 14 Outline Average1.java 2003 Prentice Hall, Inc. All rights reserved. Formulating Algorithms with Top-Down, Stepwise Refinement: Sentinel-Controlled Repetition Develop a class averaging program that processes grades for an arbitrary number of students each time the program is run. Top-Down, Stepwise Refinement Technique: Top a single statement conveys the overall function of the program. Determine the class average of the quiz 2003 Prentice Hall, Inc. All rights reserved. 15 16 First refinement Initialize variables Input, sum and count quiz grades Calculate and print the class average 2003 Prentice Hall, Inc. All rights reserved. Second refinement Initialize variables: Initialize total to zero Initialize counter to zero Input, sum and count quiz grades: (Sentinel value: Input data item which used to indicated the end of data entry) Input the first grade (possibly the sentinel) While the user has not as yet entered the sentinel Add this grade into the running total Add one to the grade counter Input the next grade (possibly the sentinel) 2003 Prentice Hall, Inc. All rights reserved. 17 18 Second refinement (continued) Calculate and print the class average If the counter is not equal to zero Set the average to the total divided by the counter Print the average else Print “No grades were entered” 2003 Prentice Hall, Inc. All rights reserved. Sentinel-Controlled Repetition Initialize total to zero Initialize counter to zero Input the first grade (possibly the sentinel) While the user has not as yet entered the sentinel Add this grade into the running total Add one to the grade counter Input the next grade (possibly the sentinel) If the counter is not equal to zero Set the average to the total divided by the counter Print the average else Print “No grades were entered” Fig. 4.8 Class-average problem pseudocode algorithm with sentinel-controlled repetition. • Average2.java has indefinite repetition – User enters sentinel value (-1) to end repetition 2003 Prentice Hall, Inc. All rights reserved. 19 20 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 29 // Fig. 4.9: Average2.java // Class-average program with sentinel-controlled repetition. import java.text.DecimalFormat; // class to format numbers import javax.swing.JOptionPane; Outline Average2.java public class Average2 { public static void main( String args[] ) { int total; // sum of grades int gradeCounter; // number of grades entered int grade; // grade value double average; // number with decimal point for average String gradeString; // grade typed by user // initialization phase total = 0; // initialize total gradeCounter = 0; // initialize loop counter // processing phase // get first grade from user gradeString = JOptionPane.showInputDialog( "Enter Integer Grade or -1 to Quit:" ); // convert gradeString to int grade = Integer.parseInt( gradeString ); 2003 Prentice Hall, Inc. All rights reserved. 21 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 56 57 58 59 // loop until sentinel value read from user while ( grade != -1 ) { until grade total = total + grade; // loop add grade to totalequals gradeCounter = gradeCounter + 1; // increment sentinelcounter value (-1) // get next grade from user gradeString = JOptionPane.showInputDialog( "Enter Integer Grade or -1 to Quit:" ); // convert gradeString to int Format numbers to nearest grade = Integer.parseInt( gradeString ); more on line 45 later hundredth; Outline Average2.java Line 31 Line 45 } // end while // termination phase DecimalFormat twoDigits = new DecimalFormat( "0.00" ); // if user entered at least one grade... if ( gradeCounter != 0 ) { //calculate average, cast operator (double), gradeCounter promoted average = (double) total / gradeCounter; double: cast // display average with two digits of precision operator ; JOptionPane.showMessageDialog( null, gradeCount "Class average is " + twoDigits.format( average ), er promoted "Class Average", JOptionPane.INFORMATION_MESSAGE ); } // end if part of if...else 2003 Prentice Hall, Inc. All rights reserved. 22 60 61 62 63 64 65 66 67 68 else // if no grades entered, output appropriate message JOptionPane.showMessageDialog( null, "No grades were entered", "Class Average", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminate application Outline Average2.java } // end main } // end class Average2 2003 Prentice Hall, Inc. All rights reserved. 45 DecimalFormat twoDigits = new DecimalFormat( "0.00" ); • Declares twoDigits a reference to an object of class DecimalFormat • Creates a DecimalFormat object initialized with the pattern “0.00” • Every number formatted with twoDigits will have at least one digit to the left of decimal point and two decimal digits • new : an operator that creates an object of the type specified and initialized by the constructor to the right of new, DecimalFormat( "0.00" ) • twoDigits gets the value of new DecimalFormat( "0.00" ) 2003 Prentice Hall, Inc. All rights reserved. 23 24 Analysis of Grades Problem • Develop a class analyzing program that processes 10 grades and recommends raising tuition if more than 8 students passed the exam. 2003 Prentice Hall, Inc. All rights reserved. Formulating Algorithms with Top-Down, Stepwise Refinement:Nested Control Structures 25 Initialize passes to zero Initialize failures to zero Initialize student to one While student counter is less than or equal to ten Input the next exam result If the student passed Add one to passes else Add one to failures If structure is nested inside the while structure Add one to student counter Print the number of passes Print the number of failures If more than eight students passed Print “Raise tuition” Fig 4.10 Pseudocode for examination-results problem. 2003 Prentice Hall, Inc. All rights reserved. 26 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 29 30 Outline // Fig. 4.11: Analysis.java // Analysis of examination results. import javax.swing.JOptionPane; public class Analysis { Loop until student counter is greater than 10 public static void main( String args[] ) { // initializing variables in declarations int passes = 0; // number of passes int failures = 0; // number of failures int studentCounter = 1; // student counter int result; // one exam result String input; String output; Analysis.java Line 19 Line 29 // user-entered value // output string // process 10 students using counter-controlled loop while ( studentCounter <= 10 ) { Nested control structure // prompt user for input and obtain value from user input = JOptionPane.showInputDialog( "Enter result (1 = pass, 2 = fail)" ); // convert result to int result = Integer.parseInt( input ); // if result 1, increment passes; if...else nested in while if ( result == 1 ) passes = passes + 1; 2003 Prentice Hall, Inc. All rights reserved. 27 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 else // if result not 1, increment failures failures = failures + 1; // increment studentCounter so loop eventually terminates studentCounter = studentCounter + 1; Outline Analysis.java } // end while // termination phase; prepare and display results output = "Passed: " + passes + "\nFailed: " + failures; // determine whether more than 8 students passed if ( passes > 8 ) output = output + "\nRaise Tuition"; JOptionPane.showMessageDialog( null, output, "Analysis of Examination Results", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminate application } // end main } // end class Analysis 2003 Prentice Hall, Inc. All rights reserved. 28 4.11 Compound Assignment Operators c = c + 3 can be written as c += 3 += is a example “Compound Assignment Operator” 2003 Prentice Hall, Inc. All rights reserved. 29 Assignment Sample Explanation operator expression Assume: int c = 3, d = 5, e = 4, f = 6, g = 12; += c += 7 c = c + 7 -= d -= 4 d = d - 4 *= e *= 5 e = e * 5 /= f /= 3 f = f / 3 %= g %= 9 g = g % 9 Fig. 4.12 Compound arithmetic assignment operators. 2003 Prentice Hall, Inc. All rights reserved. Assigns 10 to c 1 to d 20 to e 2 to f 3 to g 30 Op era tor Ca lled ++ preincrement ++ postincrement -- predecrement -- postdecrement Fig. 4.13 The inc rem ent 2003 Prentice Hall, Inc. All rights reserved. Sa m p le exp ression ++a Exp la na tion Increment a by 1, then use the new value of a in the expression in which a resides. a++ Use the current value of a in the expression in which a resides, then increment a by 1. --b Decrement b by 1, then use the new value of b in the expression in which b resides. b-Use the current value of b in the expression in which b resides, then decrement b by 1. a nd d ec re m ent op era tors. 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 31 // Fig. 4.14: Increment.java // Preincrementing and postincrementing operators. public class Increment { Outline Line 13 postincrements c public static void main( String args[] ) { int c; // demonstrate postincrement c = 5; // System.out.println( c ); // System.out.println( c++ ); // System.out.println( c ); // System.out.println(); assign 5 to c print 5 Line postincrement 21 preincrements print 5 then print 6 Increment.java Line 13 postincrement Line 21 preincrement c // skip a line // demonstrate preincrement c = 5; // System.out.println( c ); // System.out.println( ++c ); // System.out.println( c ); // assign 5 to c print 5 preincrement then print 6 print 6 } // end main } // end class Increment 5 5 6 5 6 6 2003 Prentice Hall, Inc. All rights reserved. 32 Op era tors Assoc ia tivity Typ e ++ -right to left unary postfix ++ -- + (type) right to left unary * / % left to right multiplicative + left to right additive < <= > >= left to right relational == != left to right equality ?: right to left conditional = += -= *= /= %= right to left assignment Fig. 4.15 Prec ed enc e a nd a ssoc ia tivity of the op era tors d isc ussed so fa r. Operators ae shown from top to bottom in decreasing order of precedence 2003 Prentice Hall, Inc. All rights reserved. 33 Assume: int c = 3, d = 5, e = 4, f = 6, g = 12; c += 7 * e++ +g / d –-e % f 2003 Prentice Hall, Inc. All rights reserved. ? to c 34 4.13 Primitive Types • Primitive types – “building blocks” for more complicated types • Java is strongly typed – All variables in a Java program must have a type • Java primitive types – portable across computer platforms that support Java 2003 Prentice Hall, Inc. All rights reserved. 35 Typ e boolean Size in b its char 16 byte 8 short 16 int 32 long 64 float 32 double 64 Fig. 4.16 The Ja va Va lues true or false Sta nd a rd [Note: The representation of a boolean is specific to the Java Virtual Machine on each computer platform.] '\u0000' to '\uFFFF' (ISO Unicode character set) (0 to 65535) –128 to +127 (–27 to 27 – 1) –32,768 to +32,767 (–215 to 215 – 1) –2,147,483,648 to +2,147,483,647 (–231 to 231 – 1) –9,223,372,036,854,775,808 to +9,223,372,036,854,775,807 (–263 to 263 – 1) Negative range: (IEEE 754 floating point) –3.4028234663852886E+38 to –1.40129846432481707e–45 Positive range: 1.40129846432481707e–45 to 3.4028234663852886E+38 Negative range: (IEEE 754 floating point) –1.7976931348623157E+308 to –4.94065645841246544e–324 Positive range: 4.94065645841246544e–324 to 1.7976931348623157E+308 p rim itive typ es. 2003 Prentice Hall, Inc. All rights reserved.