java语言程序设计基础篇(第八版)课件PPT第三章--机械工业出版报社--李娜译.ppt
2MotivationsIf you assigned a negative value for radius in Listing 2.1, ComputeArea.java, the program would print an invalid result. If the radius is negative, you dont want the program to compute the area. How can you deal with this situation? Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 01321308073ObjectivesFTo declare boolean type and write Boolean expressions using comparison operators (3.2).FTo program AdditionQuiz using Boolean expressions (3.3).FTo implement selection control using one-way if statements (3.4)FTo program the GuessBirthday game using one-way if statements (3.5).FTo implement selection control using two-way if statements (3.6).FTo implement selection control using nested if statements (3.7).FTo avoid common errors in if statements (3.8).FTo program using selection statements for a variety of examples (BMI, ComputeTax, SubtractionQuiz) (3.9-3.11).FTo generate random numbers using the Math.random() method (3.9).FTo combine conditions using logical operators (&, |, and !) (3.12).FTo program using selection statements with combined conditions (LeapYear, Lottery) (3.13-3.14).FTo implement selection control using switch statements (3.15).FTo write expressions using the conditional operator (3.16). FTo format output using the System.out.printf method and to format strings using the String.format method (3.17). FTo examine the rules governing operator precedence and associativity (3.18). F(GUI) To get user confirmation using confirmation dialogs (3.19).4The boolean Type and OperatorsOften in a program you need to compare two values, such as whether i is greater than j. Java provides six comparison operators (also known as relational operators) that can be used to compare two values. The result of the comparison is a Boolean value: true or false. boolean b = (1 2); 5Comparison OperatorsOperator Nameless thangreater than=greater than or equal to=equal to!=not equal to6Problem: A Simple Math Learning ToolThis example creates a program to let a first grader practice additions. The program randomly generates two single-digit integers number1 and number2 and displays a question such as “What is 7 + 9?” to the student. After the student types the answer, the program displays a message to indicate whether the answer is true or false.7One-way if Statements Boolean Expression true Statement(s) false (radius = 0) true area = radius * radius * PI; System.out.println(The area for the circle of + radius + radius + is + area); false (A) (B) if (boolean-expression) statement(s);if (radius = 0) area = radius * radius * PI; System.out.println(The area + for the circle of radius + radius + is + area);8Note if i 0 System.out.println(i is positive); (a) Wrong (b) Correct if (i 0) System.out.println(i is positive); if (i 0) System.out.println(i is positive); (a) Equivalent (b) if (i 0) System.out.println(i is positive); 9Simple if DemoWrite a program that prompts the user to enter an integer. If the number is a multiple of 5, print HiFive. If the number is divisible by 2, print HiEven.10Problem: Guessing BirthdayRunThe program can guess your birth date. Run to see how it works. 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Set1 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 Set2 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 Set3 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 Set4 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 Set5 + = 19 11Mathematics Basis for the Game19 is 10011 in binary. 7 is 111 in binary. 23 is 11101 in binary 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Set1 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 Set2 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 Set3 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 Set4 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 Set5 + = 19 10000 10 + 1 10011 00110 10 + 1 00111 19 7 10000 1000 100+ 1 11101 23 12The Two-way if Statementif (boolean-expression) statement(s)-for-the-true-case;else statement(s)-for-the-false-case; Boolean Expression false true Statement(s) for the false case Statement(s) for the true case 13if.else Exampleif (radius = 0) area = radius * radius * 3.14159; System.out.println(The area for the “ + “circle of radius + radius + is + area);else System.out.println(Negative input);14Multiple Alternative if Statements if (score = 90.0) grade = A; else if (score = 80.0) grade = B; else if (score = 70.0) grade = C; else if (score = 60.0) grade = D; else grade = F; Equivalent if (score = 90.0) grade = A; else if (score = 80.0) grade = B; else if (score = 70.0) grade = C; else if (score = 60.0) grade = D; else grade = F; 15Trace if-else statementif (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;Suppose score is 70.0The condition is falseanimation16Trace if-else statementif (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;Suppose score is 70.0The condition is falseanimation17Trace if-else statementif (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;Suppose score is 70.0The condition is trueanimation18Trace if-else statementif (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;Suppose score is 70.0grade is Canimation19Trace if-else statementif (score = 90.0) grade = A;else if (score = 80.0) grade = B;else if (score = 70.0) grade = C;else if (score = 60.0) grade = D;else grade = F;Suppose score is 70.0Exit the if statementanimation20NoteThe else clause matches the most recent if clause in the same block. int i = 1; int j = 2; int k = 3; if (i j) if (i k) System.out.println(A); else System.out.println(B); (a) Equivalent (b) int i = 1; int j = 2; int k = 3; if (i j) if (i k) System.out.println(A); else System.out.println(B); 21Note, cont.Nothing is printed from the preceding statement. To force the else clause to match the first if clause, you must add a pair of braces: int i = 1; int j = 2; int k = 3; if (i j) if (i k) System.out.println(A); else System.out.println(B);This statement prints B.22Common ErrorsAdding a semicolon at the end of an if clause is a common mistake.if (radius = 0); area = radius*radius*PI; System.out.println( The area for the circle of radius + radius + is + area);This mistake is hard to find, because it is not a compilation error or a runtime error, it is a logic error. This error often occurs when you use the next-line block style.Wrong23TIP if (number % 2 = 0) even = true; else even = false; (a) Equivalent boolean even = number % 2 = 0; (b) 24CAUTION if (even = true) System.out.println( It is even.); (a) Equivalent if (even) System.out.println( It is even.); (b) 25Problem: An Improved Math Learning Tool This example creates a program to teach a first grade child how to learn subtractions. The program randomly generates two single-digit integers number1 and number2 with number1 number2 and displays a question such as “What is 9 2?” to the student. After the student types the answer in the input dialog box, the program displays a message dialog box to indicate whether the answer is correct.Run26Problem: Body Mass Index Body Mass Index (BMI) is a measure of health on weight. It can be calculated by taking your weight in kilograms and dividing by the square of your height in meters. The interpretation of BMI for people 16 years or older is as follows:R u n BMI Interpretation below 16 serious underweight 16-18 underweight 18-24 normal weight 24-29 overweight 29-35 seriously overweight above 35 gravely overweight 27Problem: Computing TaxesThe US federal personal income tax is calculated based on the filing status and taxable income. There are four filing statuses: single filers, married filing jointly, married filing separately, and head of household. The tax rates for 2009 are shown below.Marginal Tax RateSingleMarried Filing Jointly or Qualified Widow(er)Married Filing SeparatelyHead of Household10%$0 $8,350$0 $16,700$0 $8,350$0 $11,95015%$8,351 $33,950$16,701 $67,900$8,351 $33,950$11,951 $45,50025%$33,951 $82,250$67,901 $137,050$33,951 $68,525$45,501 $117,45028%$82,251 $171,550$137,051 $208,850$68,525 $104,425$117,451 $190,20033%$171,551 $372,950$208,851 $372,950$104,426 $186,475$190,201 - $372,95035%$372,951+$372,951+$186,476+$372,951+28Problem: Computing Taxes, cont.Runif (status = 0) / Compute tax for single filerselse if (status = 1) / Compute tax for married file jointlyelse if (status = 2) / Compute tax for married file separatelyelse if (status = 3) / Compute tax for head of householdelse / Display wrong status29Logical OperatorsOperator Name!not&and|orexclusive or 30Truth Table for Operator ! p !p true false false true Example (assume age = 24, gender = M) !(age 18) is false, because (age 18) is true. !(gender != F) is true, because (grade != F) is false. 31Truth Table for Operator & p1 p2 p1 & p2 false false false false true false true false false true true true Example (assume age = 24, gender = F) (age 18) & (gender = F) is true, because (age 18) and (gender = F) are both true. (age 18) & (gender != F) is false, because (gender != F) is false. 32Truth Table for Operator | p1 p2 p1 | p2 false false false false true true true false true true true true Example (assume age = 24, gender = F) (age 34) | (gender = F) is true, because (gender = F) is true. (age 34) | (gender = M) is false, because (age 34) and (gender = M) are both false. 33ExamplesHere is a program that checks whether a number is divisible by 2 and 3, whether a number is divisible by 2 or 3, and whether a number is divisible by 2 or 3 but not both:34Truth Table for Operator ! p !p true false false true Example !(1 2) is true, because (1 2) is false. !(1 0) is false, because (1 0) is true. 35Truth Table for Operator & p1 p2 p1 & p2 false false false false true false true false false true true true Example (3 2) & (5 = 5) is true, because (3 2) and (5 = 5) are both true. (3 2) & (5 5) is false, because (5 5) is false. 36Truth Table for Operator | p1 p2 p1 | p2 false false false false true true true false true true true true Example (2 3) | (5 5) is false, because (2 3) and (5 5) are both false. (3 2) | (5 5) is true, because (3 2) is true. 37Truth Table for Operator p1 p2 p1 p2 false false false false true true true false true true true false Example (assume age = 24, gender = F) (age 34) (gender = F) is true, because (age 34) is false but (gender = F) is true. (age 34) | (gender = M) is false, because (age 34) and (gender = M) are both false. 38ExamplesSystem.out.println(Is + number + divisible by 2 and 3? + (number % 2 = 0) & (number % 3 = 0); System.out.println(Is + number + divisible by 2 or 3? + (number % 2 = 0) | (number % 3 = 0); System.out.println(Is + number + divisible by 2 or 3, but not both? + (number % 2 = 0) (number % 3 = 0); 39The & and | OperatorsSupplement III.B, “The & and | Operators”Companion Website40The & and | OperatorsIf x is 1, what is x after this expression?(x 1) & (x+ x) & ( 1 x+)How about (1 = x) | (10 x+)?(1 = x) | (10 x+)?Companion Website41Problem: Determining Leap Year?This program first prompts the user to enter a year as an int value and checks if it is a leap year.A year is a leap year if it is divisible by 4 but not by 100, or it is divisible by 400. (year % 4 = 0 & year % 100 != 0) | (year % 400 = 0)42Problem: Lottery Write a program that randomly generates a lottery of a two-digit number, prompts the user to enter a two-digit number, and determines whether the user wins according to the following rule:RunIf the user input matches the lottery in exact order, the award is $10,000.If the user input matches the lottery, the award is $3,000.If one digit in the user input matches a digit in the lottery, the award is $1,000.43switch Statementsswitch (status) case 0: compute taxes for single filers; break; case 1: compute taxes for married file jointly; break; case 2: compute taxes for married file separately; break; case 3: compute taxes for head of household; break; default: System.out.println(Errors: invalid status); System.exit(0);44switch Statement Flow Chart status is 0 Compute tax for single filers break Compute tax for married file jointly break status is 1 Compute tax for married file separatly break status is 2 Compute tax for head of household break status is 3 Default actions default Next Statement 45switch Statement Rulesswitch (switch-expression) case value1: statement(s)1; break; case value2: statement(s)2; break; case valueN: statement(s)N; break; default: statement(s)-for-default;The switch-expression must yield a value of char, byte, short, or int type and must always be enclosed in parentheses.The value1, ., and valueN must have the same data type as the value of the switch-expression. The resulting statements in the case statement are executed when the value in the case statement matches the value of the switch-expression. Note that value1, ., and valueN are constant expressions, meaning that they cannot contain variables in the expression, such as 1 + x. 46switch Statement RulesThe keyword break is optional, but it should be used at the end of each case in order to terminate the remainder of the switch statement. If the break statement is not present, the next case statement will be executed.switch (switch-expression) case value1: statement(s)1; break; case value2: statement(s)2; break; case valueN: statement(s)N; break; default: statement(s)-for-default;The default case, which is optional, can be used to perform actions when none of the specified cases matches the switch-expression.The case statements are executed in sequential order, but the order of the cases (including the default case) does not matter. However, it is good programming style to follow the logical sequence of the cases and place the default case at the end.47Trace switch statementswitch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); Suppose ch is a: animation48Trace switch statementswitch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); ch is a: animation49Trace switch statementswitch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); Execute this lineanimation50Trace switch statementswitch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); Execute this lineanimation51Trace switch statementswitch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); Execute this lineanimation52Trace switch statementswitch (ch) case a: System.out.println(ch); case b: System.out.println(ch); case c: System.out.println(ch); Next statement;Execute next statementanimation53Trace switch statementswitch (ch) case a: Sys