Java and Software Design: Introduction To
Java and Software Design: Introduction To
Weems
Headington
Slides by Sylvia Sorkin, The Community College of Baltimore County - Essex Campus
Chapter 10 Topics
switch Multiway Branching Structure do Statement for Looping for Statement for Looping break Statement
Bitwise Logical Operators Ternary and Assignment Operators Exception Handling using try and catch Defining Exception Classes
2
Switch Statement
Is a selection control structure for multiway branching. SYNTAX
switch ( IntegralExpression ) case Constant1 : Statement(s); case Constant2 : Statement(s);
. . .
// optional
// optional
default : Statement(s); }
// optional // optional
3
double char
weightInPounds = 165.8 ; weightUnit ; . . . // obtain letter for desired weightUnit switch ( weightUnit ) { case P : case p : System.out.println( Weight in pounds is + weightInPounds ) ; break ; case O : case o : System.out.println( Weight in ounces is + 16.0 * weightInPounds ) ; break ; case K : case k : System.out.println( Weight in kilos is + weightInPounds / 2.2 ) ; break ; case G : case g : System.out.println( Weight in grams is + 454.0 * weightInPounds ) ; break ; default : System.out.println( That unit is not handled! ) ; break ;
}
4
switch Structure
The value of IntegralExpression (of byte, char, short, or int type ) determines which branch is executed.
Case labels are constant ( possibly named ) integral expressions. Several case labels can precede a statement.
Control branches to the statement following the case label that matches the value of IntegralExpression. Control proceeds through all remaining statements, including the default, unless redirected with break. If no case label matches the value of IntegralExpression, control branches to the default label, if present. Otherwise control passes to the statement following the entire switch structure.
Forgetting to use break can cause logical errors because after a branch is taken, control proceeds sequentially until either break or the end of the switch structure occurs.
break Statement
break statement can be used with switch or any of the 3 looping control structures. It causes an immediate exit from the switch, while, do, or for statement in which it appears. If the break is inside nested structures, control exits only the innermost structure containing it.
7
do Statement Syntax
Is a looping control structure in which the loop condition is tested after executing the body of the loop. DoStatement do Statement while ( Expression ) ;
Loop body can be a single statement or a block.
9
// condition
10
do vs. while
POSTTEST loop (exit-condition) The loop condition is tested after executing the loop body. Loop body is always executed at least once.
PRETEST loop (entry-condition) The loop condition is tested before executing the loop body. Loop body may not be executed at all.
11
do Flowchart
DO Statement WHILE Expression true
false
When the expression is tested and found to be false, the loop is exited and control passes to the 12 statement that follows the do statement.
13
A Count-Controlled Loop
SYNTAX
for ( initialization ; test expression ; update ) { 0 or more statements to repeat
}
14
15
Example of Repetition
int num; for ( num = 1 ; num <= 3 ; num++ ) { System.out.println( Potato + num ); }
16
num
Example of Repetition
17
num
Example of Repetition
18
num
Example of Repetition
true
int num;
19
num
Example of Repetition
Potato1
20
num
Example of Repetition
Potato1
21
num
Example of Repetition
true
int num;
Potato1
22
num
Example of Repetition
Potato1
Potato2
23
num
Example of Repetition
Potato1
Potato2
24
num
Example of Repetition
true
int num;
Potato1
Potato2
25
num
Example of Repetition
Potato1
Potato2 Potato3
26
num
Example of Repetition
Potato1
Potato2 Potato3
27
num
Example of Repetition
false
int num;
Potato1
Potato2 Potato3
28
num
Example of Repetition
false
int num;
System.out.println( Potato + num ); When the loop control condition is evaluated and has value false, the loop is said to be satisfied and control passes to the statement following the for structure.
29
30
31
OUTPUT
Why?
The ; right after the ( ) means that the body statement is a null statement In general, the body of the for loop is whatever statement immediately follows the ( ) That statement can be a single statement, a compound statement, or a null statement. Actually, the code outputs one * after the loop completes its counting from 1 to 11.
32
for ( int year = 1; year <= 10; year++ ) { amount = principal * Math.pow( 1.0 + rate, year ); System.out.println(year + + amount); }
33
age += 3 ;
34
int weight ;
weight = weight - 10 ;
OR,
weight -= 10 ;
35
double money ;
money /= 5.0 ;
36
double profits ;
profits *= 2.0 ;
37
cost *= 1.15 ;
38
When the increment (or decrement) operator is used in a stand alone statement solely to add one (or subtract one) from a variables value, it can be used in either prefix or postfix form.
USE EITHER
dogs-- ;
--dogs;
39
BUT...
When the increment (or decrement) operator is used in a statement with other operators, the prefix and postfix forms can yield different results.
LETS SEE HOW. . .
40
num = 13;
alpha = ++num * 3;
num
alpha
14
num
14
num
42
alpha
41
13
num alpha
13
num
39
alpha
14
num
42
Operators can be
binary
unary ternary
involving 2 operands
involving 1 operand involving 3 operands
2+3
-3 follows
43
MEANING If Expression1 is true, then the value of the entire expression is Expression2. Otherwise, the value of the entire expression is Expression 3.
FOR EXAMPLE . . .
44
45
Control Structures
Use logical expressions which may include: 6 Relational Operators
<
<=
>
>=
==
!=
6 Logical Operators
&&
||
&
|
46
LOGICAL EXPRESSION
p |q
DESCRIPTION p | q is false if both p and q are false. It is true otherwise. p & q is true if both p and q are true. It is false otherwise.
p&q
p ^q
Short-Circuit Evaluation
Java uses short circuit evaluation of logical expressions involving && and ||. This means logical expressions with && and || are evaluated left to right and evaluation stops as soon as the correct boolean value of the entire expression is known.
Expressions involving & and | work identically to those involving && and || with the exception that both operands are always evaluated (there is no shortcircuit evaluation).
48
try-catch-finally
try {
. . . // Statements that try to open a file } catch (IOException except) { . . . // Statements execute if cant open file } finally { . . . // Statements are always executed }
50
try-catch Example
filename = fileField.getText( ); try { outFile = new PrintWriter(new FileWriter(filename)); } catch (IOException except) { errorLabel.setText(Unable to open file + filename); fileField.setText(); }
51
Defining the exception By extending type Exception and supplying a pair of constructors that call super Raising (generating) the exception By use of the throw statement Handling the exception By use of a throws clause specifying the type of exception being forwarded or, By use of try-catch-finally to catch an exception. 52
Process data
Throw exceptions if necessary
BufferedReader
DataSetException
53
class DataSetException extends Exception { public DataSetException( ) { super( ); } public DataSetException( String message ) { super( message ); } }
54
// // //
Inputs 12 monthly rainfall amounts from a file and computes the average monthly rainfall. This process is repeated for any number of recording sites.
package rainfall; import java.io.*; public class Rainfall { static void processOneSite( BufferedReader infile, PrintWriter outFile, String dataSetName ) { int count; // Loop control variable double amount; // Rain for one month double sum = 0.0; // Sums annual rainfall String dataLine; // Input from inFile String currentValue; // String for numeric int index; // Position of blank try { // Could produce an IOException dataLine = inFile.readLine( ); 55
for (count = 1; cout <= 12; count++) { // Find position of blank index = dataLine.indexOf( ); if (index > 0) { // Blank found currentValue = dataLine.substring(0, index); dataLine = dataLine.substring( Math.min(index+1, dataLine.length()), dataLine.length( )); } else // Remaining string is current value currentValue = dataLine; amount = Double.valueOf (currentValue).doubleValue( ); if (amount < 0.0) throw new DataSetException(Negative in ); else sum = sum + amount; 56 }
57
public static void main( String[ ] args ) throws FileNotFoundException, IOException { String dataSetName; inFile; // Reporting station name // Data file BufferedReader
PrintWriter
outFile;
// Output file
inFile = new BufferedReader( new FileReader(rainData.dat)); outFile = new PrintWriter( new FileWriter(outfile.dat)); // Get name of reporting station dataSetName = inFile.readLine( );
58
Rainfall Application
// Processing Loop do { processOneSite(inFile, outFile, dataSetName); dataSetName = infile.readLine( ); } while (dataSetName != null); inFile.close( ); outLine.close( ); System.exit(0); } }
59
ACKNOWLEDGMENT:
This project was supported in part by the National Science Foundation under award DUE-ATE 9950056. Opinions are those of the authors and do not necessarily reflect the views of the National Science Foundation.
60