Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AhmadLang / Java, How To Program, 2004

.pdf
Скачиваний:
630
Добавлен:
31.05.2015
Размер:
51.82 Mб
Скачать

After setting the withdrawal amount, the transaction retrieves the available balance of the user's account (i.e., the availableBalance attribute of the user's Account object) from the database. The activity flow then arrives at another decision. If the requested withdrawal amount exceeds the user's available balance, the system displays an appropriate error message informing the user of the problem, then returns to the beginning of the activity diagram and prompts the user to input a new amount. If the requested withdrawal amount is less than or equal to the user's available balance, the transaction proceeds. The transaction next tests whether the cash dispenser has enough cash remaining to satisfy the withdrawal request. If it does not, the transaction displays an appropriate error message, then returns to the beginning of the activity diagram and prompts the user to choose a new amount. If sufficient cash is available, the transaction interacts with the database to debit the withdrawal amount from the user's account (i.e., subtract the amount from both the availableBalance and totalBalance attributes of the user's Account object). The transaction then dispenses the desired amount of cash and instructs the user to take the cash that is dispensed. Finally, the main flow of activity merges with the cancellation flow of activity before reaching the final state.

[Page 219]

[Page 220]

We have taken the first steps in modeling the behavior of the ATM system and have shown how an object's attributes participate in performing the object's activities. In Section 6.14, we investigate the behaviors for all classes to give a more accurate interpretation of the system behavior by "filling in" the third compartments of the classes in our class diagram.

Software Engineering Case Study Self-Review Exercises

5.1 State whether the following statement is true or false, and if false, explain why: State diagrams model structural aspects of a system.

5.2 An activity diagram models the __________ that an object performs and the order in which it performs them.

a.actions

b.attributes

c.states

d.state transitions

5.3 Based on the requirements document, create an activity diagram for a deposit transaction.

Answers to Software Engineering Case Study Self-Review Exercises

5.1 False. State diagrams model some of the behavior of a system.

5.2 a.

5.3 Figure 5.32 presents an activity diagram for a deposit transaction. The diagram models the actions that occur after the user chooses the deposit option from the main menu and before the ATM returns the user to the main menu. Recall that part of receiving a deposit amount from the user involves converting an integer number of cents to a dollar amount. Also recall that crediting a deposit amount to an account involves increasing only the totalBalance attribute of the user's Account object. The bank updates the availableBalance attribute of the user's Account object only after confirming the amount of cash in the deposit envelope and after the enclosed checks clearthis occurs independently of the ATM system.

Figure 5.32. Activity diagram for a deposit transaction.

(This item is displayed on page 221 in the print version)

[View full size image]

[Page 220 (continued)]

5.12. Wrap-Up

In this chapter, we completed our introduction to Java's control statements, which enable programmers to control the flow of execution in methods. Chapter 4 discussed Java's if, if...else and while statements. The current chapter demonstrated Java's remaining control statementsfor, do...while and switch. We have shown that any algorithm can be developed using combinations of the sequence structure (i.e., statements listed in the order in which they should execute), the three types of selection statementsif, if...else and switchand the three types of repetition statementswhile, do...while and for. In this chapter and Chapter 4, we have discussed how programmers can combine these building blocks to utilize proven program-construction and problem-solving techniques. This chapter also introduced Java's logical operators, which enable programmers to use more complex conditional expressions in control statements.

In Chapter 3, we introduced the basic concepts of objects, classes and methods. Chapter 4 and this chapter provided a thorough introduction to the types of control statements that programmers use to specify program logic in methods. In Chapter 6, we examine methods in greater depth.

[Page 221]

Summary

The for repetition statement specifies the details of counter-controlled-repetition. The general format of the for statement is

for ( initialization; loopContinuationCondition; increment ) statement

where the initialization expression names the loop's control variable and provides its initial value, loopContinuationCondition is the condition that determines whether the loop should continue executing and increment modifies the control variable's value, so that the loop-continuation condition eventually becomes false.

Typically, for statements are used for counter-controlled repetition and while statements are used for sentinel-controlled repetition.

[Page 222]

The scope of a variable defines where it can be used in a program. For example, a local variable

can be used only in the method that declares the variable and only from the point of declaration through the end of the method.

The initialization, loop-continuation condition and increment portions of a for statement can

contain arithmetic expressions. The increment of a for statement may also be negative, in which case it is really a decrement, and the loop counts downward.

If the loop-continuation condition in a for header is initially false, the program does not execute the for statement's body. Instead, execution proceeds with the statement following the for.

The format specifier %20s outputs a String with a field width of 20 (i.e., at least 20 character

positions). If the value to be output is less than 20 character positions wide, the value is right justified in the field by default. A value can be output left justified by simply preceding the field width with the minus sign () formatting flag.

Methods that perform common tasks and do not require objects are called static methods.

Java does not include an exponentiation operator. Instead, Math.pow(x, y) can be used to

calculate the value of x raised to the y th power. The method receives two double arguments and returns a double value.

The comma (,) formatting flag in a format specifier (e.g., %,20.2f) indicates that a value should be output with a thousands separator.

The do...while statement tests the loop-continuation condition after executing the loop's body; therefore, the body always executes at least once. The format for the do...while statement is

do

{

statement

} while ( condition );

The switch multiple-selection statement performs different actions based on the possible values

of an integer variable or expression. Each action is associated with the value of a constant integral expression (i.e., a constant value of type byte, short, int or char, but not long) that the variable or expression on which the switch is based may assume. The switch statement

consists of a block containing a sequence of case labels and an optional default case.

The expression in parentheses following keyword switch is called the controlling expression of

the switch. A program compares the value of the controlling expression with each case label, and if a match occurs, the program executes the statements for that case.

The switch statement does not provide a mechanism for testing ranges of values, so every value that must be tested should be listed in a separate case label.

Listing cases consecutively with no statements between them enables those cases to perform the same set of statements.

Each case can have multiple statements. The switch statement differs from other control statements in that it does not require braces around multiple statements in each case.

Most switch statements use a break in each case to terminate the switch statement after processing the case.

The end-of-file indicator is a system-dependent keystroke combination which indicates that there is no more data to input.

Scanner method hasNext determines whether there is more data to input. This method returns the boolean value TRue if there is more data; otherwise, it returns false.

The break statement, when executed in one of the repetition statements, causes immediate exit from that statement. Execution continues with the first statement after the control statement.

[Page 223]

The continue statement, when executed in a while, for or do...while, skips the remaining statements in the loop body and proceeds with the next iteration of the loop.

Logical operators enable programmers to form complex conditions by combining simple

conditions. The logical operators are && (conditional AND), || (conditional OR), & (boolean logical AND), | (boolean logical inclusive OR), ^ (boolean logical exclusive OR) and ! (logical NOT).

The && (conditional AND) operator can be used to ensure that two conditions are both true before choosing a certain path of execution.

The || (conditional OR) operator can be used to ensure that either or both of two conditions are true before choosing a certain path of execution.

The parts of an expression containing && or || operators are evaluated only until it is known

whether the condition is true or false. This feature of conditional AND and conditional OR expressions is called short-circuit evaluation.

The boolean logical AND (&) and boolean logical inclusive OR (|) operators work identically to

the && (conditional AND) and || (conditional OR) operators, with one exception: The boolean logical operators always evaluate both of their operands (i.e., they do not perform short-circuit evaluation).

A simple condition containing the boolean logical exclusive OR (^) operator is TRue if and only if

one of its operands is TRue and the other is false. If both operands are TRue or both are false, the entire condition is false.

The ! (logical NOT, also called logical negation or logical complement) operator enables a

programmer to "reverse" the meaning of a condition. The logical negation operator is placed before a condition to choose a path of execution if the original condition (without the logical negation operator) is false. In most cases, the programmer can avoid using logical negation by expressing the condition differently with an appropriate relational or equality operator.

Unlike the logical operators &&, ||, &, | and ^, which are binary operators that combine two

conditions, the logical negation operator is a unary operator that has only a single condition as an operand.

The %b format specifier causes the value of a boolean expression to be output as the word "true" or the word "false" based on the expression's value.

Any form of control ever needed in a Java program can be expressed in terms of sequence,

selection and repetition statements, and these can be combined in only two waysstacking and nesting.

[Page 223 (continued)]

Terminology

!, logical not operator

&, boolean logical AND operator

&&, conditional AND operator

|, boolean logical OR operator

||, conditional OR operator

^, boolean logical exclusive OR operator boolean logical AND (&)

boolean logical exclusive OR (^) boolean logical inclusive OR (|) break statement

case label

character constant conditional AND (&&) conditional OR (||) constant integral expression constant variable

continue statement control variable

controlling expression of a switch decrement a control variable default case in switch

do...while repetition statement

final keyword

for header

for repetition statement

for statement header

increment a control variable initial value

[Page 224]

iteration of a loop logical complement (!) logical negation (!) logical operators

loop-continuation condition multiple selection

nested control statements nesting rule

off-by-one error repetition statement scope of a variable short-circuit evaluation side effect

simple condition

single-entry/single-exit control statements stacked control statements

stacking rule static method

switch selection statement truth table

[Page 224 (continued)]

Self-Review Exercises

5.1 Fill in the blanks in each of the following statements:

a.Typically, __________ statements are used for counter-controlled repetition and statements are used for sentinel-controlled repetition.

b.The do...while statement tests the loop-continuation condition __________

executing the loop's body; therefore, the body always executes at least once.

c.The __________ statement selects among multiple actions based on the possible values of an integer variable or expression.

d.The __________ statement, when executed in a repetition statement, skips the remaining statements in the loop body and proceeds with the next iteration of the loop.

e.The __________ operator can be used to ensure that two conditions are both true before choosing a certain path of execution.

f.If the loop-continuation condition in a for header is initially __________, the program does not execute the for statement's body.

g.Methods that perform common tasks and do not require objects are called

__________ methods.

5.2 State whether each of the following is true or false. If false, explain why.

a.The default case is required in the switch selection statement.

b.The break statement is required in the last case of a switch selection statement.

c. The expression ( (x > y) && (a < b ) ) is true if either x > y is true or a < b is true.

d.An expression containing the || operator is true if either or both of its operands are true.

e.The comma (,) formatting flag in a format specifier (e.g., %,20.2f) indicates that a value should be output with a thousands separator.

f.To test for a range of values in a switch statement, use a hyphen () between the start and end values of the range in a case label.

g.Listing cases consecutively with no statements between them enables the cases to perform the same set of statements.

5.3 Write a Java statement or a set of Java statements to accomplish each of the following tasks:

a.Sum the odd integers between 1 and 99, using a for statement. Assume that the integer variables sum and count have been declared.

b.Calculate the value of 2.5 raised to the power of 3, using the pow method.

c.Print the integers from 1 to 20, using a while loop and the counter variable i. Assume that the variable i has been declared, but not initialized. Print only five integers per line. [Hint : Use the calculation i % 5. When the value of this expression is 0, print a newline character; otherwise, print a tab

character. Assume that this code is an application. Use the

System.out.println() method to output the newline character, and use the System.out.print('\t') method to output the tab character.]

d. Repeat part (c), using a for statement.

[Page 225]

5.4 Find the error in each of the following code segments, and explain how to correct it:

a.i = 1;

while ( i <= 10 ); i++;

}

b.for ( k = 0.1; k != 1.0 ; k += 0.1 ) System.out.println( k );

c.switch ( n )

{

case 1:

System.out.println( "The number is 1" ); case 2:

System.out.println( "The number is 2" ); break;

default:

System.out.println( "The number is not 1 or 2" ); break;

}

d.The following code should print the values 1 to 10: n = 1 ;

while ( n < >10 )

System.out.println( n++ );