Kĩ thuật lập trình - Control statements: part 1

Initializing local variables when they are declared helps the programmer avoid any compilation errors that might arise from attempts to use uninitialized data. While Java does not require that local variable initializations be incorporated into declarations, it does require that local variables be initialized before their values are used in an expression.

ppt86 trang | Chia sẻ: huyhoang44 | Lượt xem: 706 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Control statements: part 1, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
4Control Statements: Part 11 Let’s all move one place on.Lewis CarrollThe wheel is come full circle. William ShakespeareHow many apples fell on Newton’s head before he took the hint!Robert FrostAll the evolution we know of proceeds from the vague to the definite.Charles Sanders Peirce2OBJECTIVESIn this chapter you will learn: To use basic problem-solving techniques.To develop algorithms through the process of top-down, stepwise refinement.To use the if and ifelse selection statements to choose among alternative actions.To use the while repetition statement to execute statements in a program repeatedly.To use counter-controlled repetition and sentinel-controlled repetition.To use the assignment, increment and decrement operators.The primitive data types.34.1   Introduction4.2   Algorithms4.3   Pseudocode4.4   Control Structures4.5   if Single-Selection Statement4.6   ifelse Double-Selection Statement4.7   while Repetition Statement4.8   Formulating Algorithms: Counter-Controlled Repetition4.9   Formulating Algorithms: Sentinel-Controlled Repetition 4.10   Formulating Algorithms: Nested Control Statements4.11   Compound Assignment Operators4.12   Increment and Decrement Operators4.13   Primitive Types4.14   (Optional) GUI and Graphics Case Study: Creating Simple Drawings4.15   (Optional) Software Engineering Case Study: Identifying Class Attributes4.16   Wrap-Up44.2  Algorithms AlgorithmsThe actions to executeThe order in which these actions executeProgram controlSpecifies the order in which actions execute in a program54.3  Pseudocode PseudocodeAn informal language similar to EnglishHelps programmers develop algorithmsDoes not run on computersShould contain input, output and calculation actionsShould not contain variable declarations64.4  Control Structures Sequential executionStatements are normally executed one after the other in the order in which they are writtenTransfer of controlSpecifying the next statement to execute that is not necessarily the next one in orderCan be performed by the goto statementStructured programming eliminated goto statements74.4  Control Structures (Cont.)Bohm and Jacopini’s researchDemonstrated that goto statements were unnecessaryDemonstrated that all programs could be written with three control structuresThe sequence structure,The selection structure andThe repetition structure84.4  Control Structures (Cont.)UML activity diagram (www.uml.org)Models the workflow (or activity) of a part of a software systemAction-state symbols (rectangles with their sides replaced with outward-curving arcs)represent action expressions specifying actions to performDiamondsDecision symbols (explained in Section 4.5)Merge symbols (explained in Section 4.7)94.4  Control Structures (Cont.)Small circlesSolid circle represents the activity’s initial stateSolid circle surrounded by a hollow circle represents the activity’s final stateTransition arrowsIndicate the order in which actions are performedNotes (rectangles with the upper-right corners folded over)Explain the purposes of symbols (like comments in Java)Are connected to the symbols they describe by dotted lines10Fig. 4.1 | Sequence structure activity diagram. 114.4  Control Structures (Cont.)Selection Statementsif statementSingle-selection statementifelse statementDouble-selection statementswitch statementMultiple-selection statement124.4  Control Structures (Cont.)Repetition statementsAlso known as looping statementsRepeatedly performs an action while its loop-continuation condition remains truewhile statementPerforms the actions in its body zero or more timesdowhile statementPerforms the actions in its body one or more timesfor statementPerforms the actions in its body zero or more times134.4  Control Structures (Cont.)Java has three kinds of control structuresSequence statement,Selection statements (three types) andRepetition statements (three types)All programs are composed of these control statementsControl-statement stackingAll control statements are single-entry/single-exitControl-statement nesting144.5  if Single-Selection Statement if statementsExecute an action if the specified condition is trueCan be represented by a decision symbol (diamond) in a UML activity diagramTransition arrows out of a decision symbol have guard conditionsWorkflow follows the transition arrow whose guard condition is true15Fig. 4.2 | if single-selection statement UML activity diagram. 164.6  ifelse Double-Selection Statement ifelse statementExecutes one action if the specified condition is true or a different action if the specified condition is falseConditional Operator ( ? : )Java’s only ternary operator (takes three operands)? : and its three operands form a conditional expressionEntire conditional expression evaluates to the second operand if the first operand is trueEntire conditional expression evaluates to the third operand if the first operand is false17Good Programming Practice 4.1Indent both body statements of an ifelse statement.18Good Programming Practice 4.2If there are several levels of indentation, each level should be indented the same additional amount of space. 19Good Programming Practice 4.3Conditional expressions are more difficult to read than ifelse statements and should be used to replace only simple ifelse statements that choose between two values.20Fig. 4.3 | ifelse double-selection statement UML activity diagram. 214.6  ifelse Double-Selection Statement (Cont.)Nested ifelse statementsifelse statements can be put inside other ifelse statementsDangling-else problemelses are always associated with the immediately preceding if unless otherwise specified by braces { }BlocksBraces { } associate statements into blocksBlocks can replace individual statements as an if body224.6  ifelse Double-Selection Statement (Cont.)Logic errorsFatal logic errors cause a program to fail and terminate prematurelyNonfatal logic errors cause a program to produce incorrect resultsEmpty statementsRepresented by placing a semicolon ( ; ) where a statement would normally beCan be used as an if body23Common Programming Error 4.1Forgetting one or both of the braces that delimit a block can lead to syntax errors or logic errors in a program.24Good Programming Practice 4.4Always using braces in an if...else (or other) statement helps prevent their accidental omission, especially when adding statements to the if-part or the else-part at a later time. To avoid omitting one or both of the braces, some programmers type the beginning and ending braces of blocks before typing the individual statements within the braces.25Common Programming Error 4.2Placing a semicolon after the condition in an if or if...else statement leads to a logic error in single-selection if statements and a syntax error in double-selection if...else statements (when the if-part contains an actual body statement).264.7  while Repetition Statement while statementRepeats an action while its loop-continuation condition remains trueUses a merge symbol in its UML activity diagramMerges two or more workflowsRepresented by a diamond (like decision symbols) but has:Multiple incoming transition arrows,Only one outgoing transition arrow andNo guard conditions on any transition arrows27Common Programming Error 4.3Not providing, in the body of a while statement, an action that eventually causes the condition in the while to become false normally results in a logic error called an infinite loop, in which the loop never terminates.28Fig. 4.4 | while repetition statement UML activity diagram. 294.8  Formulating Algorithms: Counter-Controlled Repetition Counter-controlled repetitionUse a counter variable to count the number of times a loop is iteratedInteger divisionThe fractional part of an integer division calculation is truncated (thrown away)30Fig. 4.5 | Pseudocode algorithm that uses counter-controlled repetition to solve the class-average problem. 1 Set total to zero 2 Set grade counter to one 3 4 While grade counter is less than or equal to ten 5 Prompt the user to enter the next grade 6 Input the next grade 7 Add the grade into the total 8 Add one to the grade counter 9 10 Set the class average to the total divided by ten 11 Print the class average 31OutlineGradeBook.java (1 of 3)Assign a value to instance variable courseNameDeclare method setCourseNameDeclare method getCourseName32OutlineGradeBook.java (2 of 3)Declare method displayMessageDeclare method determineClassAverageDeclare and initialize Scanner variable inputDeclare local int variables total, gradeCounter, grade and average33OutlineGradeBook.java (3 of 3)while loop iterates as long as gradeCounter <= 10Increment the counter variable gradeCounterCalculate average gradeDisplay results34Good Programming Practice 4.5Separate declarations from other statements in methods with a blank line for readability.35Software Engineering Observation 4.1Experience has shown that the most difficult part of solving a problem on a computer is developing the algorithm for the solution. Once a correct algorithm has been specified, the process of producing a working Java program from the algorithm is normally straightforward.36Common Programming Error 4.4Using the value of a local variable before it is initialized results in a compilation error. All local variables must be initialized before their values are used in expressions.37Error-Prevention Tip 4.1Initialize each counter and total, either in its declaration or in an assignment statement. Totals are normally initialized to 0. Counters are normally initialized to 0 or 1, depending on how they are used (we will show examples of when to use 0 and when to use 1).38OutlineGradeBookTest.javaCreate a new GradeBook objectPass the course’s name to the GradeBook constructor as a stringCall GradeBook’s determineClassAverage method39Common Programming Error 4.5Assuming that integer division rounds (rather than truncates) can lead to incorrect results. For example, 7 ÷ 4, which yields 1.75 in conventional arithmetic, truncates to 1 in integer arithmetic, rather than rounding to 2.404.9  Formulating Algorithms: Sentinel-Controlled Repetition Sentinel-controlled repetitionAlso known as indefinite repetitionUse a sentinel value (also known as a signal, dummy or flag value)A sentinel value cannot also be a valid input value414.9  Formulating Algorithms: Sentinel-Controlled Repetition (Cont.)Top-down, stepwise refinementTop: a single statement that conveys the overall function of the programFirst refinement: multiple statements using only the sequence structureSecond refinement: commit to specific variables, use specific control structures42Common Programming Error 4.6Choosing a sentinel value that is also a legitimate data value is a logic error.43Software Engineering Observation 4.2Each refinement, as well as the top itself, is a complete specification of the algorithm—only the level of detail varies.44Software Engineering Observation 4.3Many programs can be divided logically into three phases: an initialization phase that initializes the variables; a processing phase that inputs data values and adjusts program variables (e.g., counters and totals) accordingly; and a termination phase that calculates and outputs the final results.45Error-Prevention Tip 4.2When performing division by an expression whose value could be zero, explicitly test for this possibility and handle it appropriately in your program (e.g., by printing an error message) rather than allow the error to occur46Fig. 4.8 | Class-average problem pseudocode algorithm with sentinel-controlled repetition. 1 Initialize total to zero 2 Initialize counter to zero 3 4 Prompt the user to enter the first grade 5 Input the first grade (possibly the sentinel) 6 7 While the user has not yet entered the sentinel 8 Add this grade into the running total 9 Add one to the grade counter 10 Prompt the user to enter the next grade 11 Input the next grade (possibly the sentinel) 12 13 If the counter is not equal to zero 14 Set the average to the total divided by the counter 15 Print the average 16 else 17 Print “No grades were entered” 47Software Engineering Observation 4.4Terminate the top-down, stepwise refinement process when you have specified the pseudocode algorithm in sufficient detail for you to convert the pseudocode to Java. Normally, implementing the Java program is then straightforward. 48Software Engineering Observation 4.5Some experienced programmers write programs without ever using program-development tools like pseudocode. They feel that their ultimate goal is to solve the problem on a computer and that writing pseudocode merely delays the production of final outputs. Although this method may work for simple and familiar problems, it can lead to serious errors and delays in large, complex projects. 49OutlineGradeBook.java (1 of 3)Assign a value to instance variable courseNameDeclare method setCourseNameDeclare method getCourseName50OutlineGradeBook.java (2 of 3)Declare method displayMessageDeclare method determineClassAverageDeclare and initialize Scanner variable inputDeclare local int variables total, gradeCounter and grade and double variable average51OutlineGradeBook.java (3 of 3)while loop iterates as long as grade != the sentinel value, -1Calculate average grade using (double) to perform explicit conversionDisplay average gradeDisplay “No grades were entered” message52Good Programming Practice 4.6In a sentinel-controlled loop, the prompts requesting data entry should explicitly remind the user of the sentinel value.53Common Programming Error 4.7Omitting the braces that delimit a block can lead to logic errors, such as infinite loops. To prevent this problem, some programmers enclose the body of every control statement in braces even if the body contains only a single statement.544.9  Formulating Algorithms: Sentinel-Controlled Repetition (Cont.)Unary cast operatorCreates a temporary copy of its operand with a different data typeexample: (double) will create a temporary floating-point copy of its operandExplicit conversionPromotionConverting a value (e.g. int) to another data type (e.g. double) to perform a calculationImplicit conversion55Common Programming Error 4.8The cast operator can be used to convert between primitive numeric types, such as int and double, and between related reference types (as we discuss in Chapter 10, Object-Oriented Programming: Polymorphism). Casting to the wrong type may cause compilation errors or runtime errors.56OutlineGradeBookTest.javaCreate a new GradeBook objectPass the course’s name to the GradeBook constructor as a stringCall GradeBook’s determineClassAverage method574.10  Formulating Algorithms: Nested Control Statements Control statements can be nested within one anotherPlace one control statement inside the body of the other58Fig. 4.11 | Pseudocode for examination-results problem.59OutlineAnalysis.java (1 of 2)Declare processExamResults’ local variableswhile loop iterates as long as studentCounter <= 1060OutlineAnalysis.java (2 of 2)Determine whether this student passed or failed and increment the appropriate variableDetermine whether more than eight students passed the exam61Error-Prevention Tip 4.3Initializing local variables when they are declared helps the programmer avoid any compilation errors that might arise from attempts to use uninitialized data. While Java does not require that local variable initializations be incorporated into declarations, it does require that local variables be initialized before their values are used in an expression.62OutlineAnalysisTest.javaCreate an Analysis objectMore than 8 students passed the exam634.11  Compound Assignment Operators Compound assignment operatorsAn assignment statement of the form: variable = variable operator expression; where operator is +, -, *, / or % can be written as: variable operator= expression;example: c = c + 3; can be written as c += 3;This statement adds 3 to the value in variable c and stores the result in variable c64Fig. 4.14 | Arithmetic compound assignment operators. 654.12  Increment and Decrement Operators Unary increment and decrement operatorsUnary increment operator (++) adds one to its operandUnary decrement operator (--) subtracts one from its operandPrefix increment (and decrement) operatorChanges the value of its operand, then uses the new value of the operand in the expression in which the operation appearsPostfix increment (and decrement) operatorUses the current value of its operand in the expression in which the operation appears, then changes the value of the operand66Good Programming Practice 4.7Unlike binary operators, the unary increment and decrement operators should be placed next to their operands, with no intervening spaces.67Fig. 4.15 | Increment and decrement operators. 68OutlineIncrement.javaPostincrementing the c variablePreincrementing the c variable69Common Programming Error 4.9Attempting to use the increment or decrement operator on an expression other than one to which a value can be assigned is a syntax error. For example, writing ++(x + 1) is a syntax error because (x + 1) is not a variable.70Fig. 4.17 | Precedence and associativity of the operators discussed so far. 714.13  Primitive Types Java is a strongly typed languageAll variables have a typePrimitive types in Java are portable across all platforms that support Java72Portability Tip 4.1Unlike C and C++, the primitive types in Java are portable across all computer platforms that support Java. Thanks to this and Java's many other portability features, a programmer can write a program once and be certain that it will execute on any computer platform that supports Java. This capability is sometimes referred to as WORA (Write Once, Run Anywhere).734.14  (Optional) GUI and Graphics Case Study: Creating Simple Drawings Java’s coordinate systemDefined by x-coordinates and y-coordinatesAlso known as horizontal and vertical coordinatesAre measured along the x-axis and y-axisCoordinate units are measured in pixelsGraphics class from the java.awt packageProvides methods for drawing text and shapesJPanel class from the javax.swing packageProvides an area on which to draw74Fig. 4.18 | Java coordinate system. Units are measured in pixels. 754.14  (Optional) GUI and Graphics Case Study: Creating Simple Drawings (Cont.)Inheriting extends keywordThe subclass inherits from the superclassThe subclass has the data and methods that the superclass has as well as any it defines for itself76OutlineDrawPanel.javaImport the java.awt.Graphics and the javax.swing.JPanel classesThe DrawPanel class extends the JPanel classDeclare the paintComponent methodDraw the two lines Retrieve the JPanel’s width and height774.14  (Optional) GUI and Graphics Case Study: Creating Simple Drawings (Cont.)The JPanel classEvery JPanel has a paintComponent methodpaintComponent is called whenever the system needs to display the JPanelgetWidth and getHeight methodsReturn the width and height of the JPanel, respectivelydrawLine methodDraws a line from the coordinates defined by its first two arguments to the coordinates defined by its second two arguments784.14  (Optional) GUI and Graphics Case Study: Creating Simple Drawings (Cont.)JFrame class from the javax.swing packageAllows the programmer to create a windowsetDefaultCloseOperation methodPass JFrame.EXIT_ON_CLOSE as its argument to set the application to terminate when the user closes the windowadd methodAttaches a JPanel to the JFramesetSize methodSets the width (first argument) and height (second argument) of the JFrame79OutlineDrawPanelTest.javaImport the JFrame class from the javax.swing packageCreate DrawPanel and JFrame objectsSet the application to terminate when the user closes the windowAdd the DrawPanel to the JFrameSet the size of and display the JFrame80Fig. 4.21 | Lines fanning from a corner. 81Fig. 4.22 | Line art with loops and drawLine. 82Fig. 4.23 | Descriptive words and phrases from the ATM requirements. 83Software Engineering Observation 4.6At early stages in the design process, classes often lack attributes (and operations). Such classes should not be eliminated, however, because attributes (and operations) may become evident in the later phases of design and implementation.844.15   Identifying Class Attributes Identifying attributesLook for descriptive words and phrases in the requirements documentCreate attributes and assign them to classesEach attribute is given an attribute typeSome attributes may have an initial valueSome classes may end up without any attributesAdditional attributes may be added later on as the design and implementation process continuesReference-type attributes are modeled more clearly as associations85Fig. 4.24 | Classes with attributes. 86

Các file đính kèm theo tài liệu này:

  • pptjavahtp7e_04_5723_4658.ppt