Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 54

4.

More Control Structures and


Types
4.1 Logical (Conditional) AND, OR, and NOT
4.2 Nested Ifs and the Switch Statement
4.3 The For and Do-While Loops
4.4 Additional Primitive Types
4.5 Using the Math Library
4.6 Solving Problems with Java: An Iterative
Development Cycle
Objectives

• Learn useful selection and repetition


statement
• Use primitive types and operators
• Use the Math library
• Build software using an iterative
development cycle
Logical Operators
• Boolean expressions can use logical (conditional)
! Logical NOT
&& Logical AND
|| Logical OR
• They all take boolean operands and produce
boolean results
• Logical NOT (Conditional Complement) is a unary
operator (one operand), but the other two are
binary operators (two operands)
Logical Operators
• Conditions in selection statements and loops can
use logical operators to form complex expressions
if (b >= a && c >= a)
min = a;
if (a >= b && c >= b)
min = b;
if (a >= c && b >= c)
min = c;
• Logical operators have precedence relationship
between themselves and other operators
S ymbol Me aning Example
&& conditiona l AND (a ge > 20) && (a ge < 35)
|| conditiona l OR (he ight > 78.5) || (we ight > 300)

Figure 4.2 Conditional Operators


age age > 20 age < 35 age > 20 && age < 35
10 fa ls e true fa ls e
25 true true true
40 true fa ls e fa ls e

Figure 4.3 Evaluating an example of a conditional AND expression


A B A && B
true true true
true fa ls e fa ls e
fa ls e (don't ca re ) fa ls e

Figure 4.4 Evaluating a conditional AND expression


height weight height > 78.5 weight > 300 (height>78.5) || (weight>300)
62 125 false false false
80 250 true false true
72 310 false true true
80 325 true true true

Figure 4.5 Evaluating an example of a conditional OR expression


A B A || B
true (don't ca re ) true
fa ls e true true
fa ls e fa ls e fa ls e

Figure 4.6 Evaluating a condition OR expression


A !A
true fa ls e
fa ls e true

Figure 4.7 Evaluating a logical complement expression


Highest
NOT! !
multiplicative * / %
additive + -
relational < > <= >=
equality == !=
conditional AND &&
conditional OR ||
assignment = += -= *= /= %=
Lowest
Figure 4.8 Operator precedence*
if (score >= 60 && score < 80)
System.out.println("Score " + score + " receives a C");
else
System.out.println("Score " + score + " receives a B or an A");

Figure 4.9 If-else statement to choose between two alternatives


Nested If Statements
• The if-true-statement and if-false-statement of an
if statement could be another if statement
• These are called nested if statements
if (a >= b)
if (b >= c) min = c;
else min = b;
else
if (a >= c) min = c;
else min = a;
• An else clause is matched to the last unmatched if
(no matter what the indentation implies)
if (score >= 60 && score < 80)
System.out.println("Score " + score + " receives a C");
else if (score >=80 && score < 90)
System.out.println("Score " + score + " receives a B");
else
System.out.println("Score " + score + " receives an A");
 

Figure 4.10 Nested if-else statement to choose among three alternatives


if (score >= 60 && score < 80)
System.out.println("Score " + score + " receives a C");
else if (score >=80 && score < 90)
System.out.println("Score " + score + " receives a B");
else if (score >= 90 && score <= 100)
System.out.println("Score " + score + " receives an A");

Figure 4.11 Improved version of Figure 4.10


True
Test1? Test1 true code

False
True
Test2? Test2 true code

False
...
False
True
Last? Last true code

False

Last false code

Figure 4.12 Flow chart for nested if-else statements


if (score >= 60)
if (score >= 80)
System.out.println("You got a B or an A");
else
System.out.println("You got a D or an F"); // Wrong pairing

Figure 4.13 Incorrect attempt to pair an else with an if


if (score >= 60)
if (score >= 80)
System.out.println("You got a B or an A");
else
System.out.println("You got a C"); // Correct pairing

Figure 4.14 Corrected pairing of else and if


if (score >= 60) {
if (score >= 80)
System.out.println("You got a B or an A");
}
Else
// Paired to first 'if'
System.out.println("You got a D or an F");

Figure 4.15 Figure 4.13 rewritten as an if-else with nested if


The Switch Statement
• The switch statement provides another means to
decide which statement to execute next
• The switch statement evaluates an expression,
then attempts to match the result to one of several
possible cases
• Each case contains a value and a list of statements
• The flow of control transfers to statement list
associated with the first value that matches
The Switch Statement
• A switch statement can have an optional default
case which has no associated value
• If the default case is present, control will transfer
to it if no other case value matches
• The default case can be positioned anywhere in
the switch, it is usually placed at the end
• If there is no default case, and no other value
matches, control falls through to the next
statement after the switch
The Switch Statement
• Often a break statement is used as the last
statement in each case’s statement list
• A break statement causes control to transfer to the
end of the switch statement
• If a break statement is not used, the flow of
control will continue into the next case
• The expression of a switch statement must result
in an integral data type, like an integer or character
• You cannot perform relational checks with a
switch staement
switch(mark) {
case 0:
case 1:
case 2:
case 3:
case 4: System.out.println("F");
break;
case 5: System.out.println("D");
break;
case 6:
case 7: System.out.println("C");
break;
case 8: System.out.println("B");
break;
case 9:
case10: System.out.println("A");
break;
default:System.out.println("Incorrect score");
}

Figure 4.16 An example of a switch statement


The For Statement
• The for statement has the following syntax:
for ( initialization ; condition ; increment )
statement ;
• The initialization is executed once before the loop
begins
• The statement is executed until the condition
becomes false
• The increment portion is executed at the end of
each iteration
The For Statement
• The for statement is equivalent to the following
while loop structure
initialization ;
while ( condition )
{
statement ;
increment ;
}
• Like a while loop, the condition of a for loop is
tested prior to executing the loop body
• Therefore, the body of a for loop can be
executed zero or more times
int sum = 0;
for (int i = 1; i <= 4; i++)
sum += i;

Figure 4.17 A for statement for the sum 1+2+3+4


initialize i = 1
test 1 <= 4 is true
execute body sum += 1 (result: sum = 0 + 1 = 1)
update i++ (result: i = 2)
test 2 <= 4 is true
execute body sum += 2 (result: sum = 1 + 2 = 3)
update i++ (result: i = 3)
test 3 <= 4 is true
execute body sum += 3 (result: sum = 3 + 3 = 6)
update i++ (result: i + 4)
test 4 <= 4 is true
execute body sum += 4 (result: sum = 6 + 4 =
10)
update i++ (result: i = 5)
test 5 <= 4 is false

Figure 4.18 Trace of execution of the for loop of Figure 4.17


int sum = 0;
for (int i = 1; i < 10; i += 2)
sum += i;

Figure 4.19 A for statement for the sum 1+3+5+7+9


int sum = 0;
for (int i = 4; i >= l; i--)
sum += i;

Figure 4.20 A for statement for the sum 4+3+2+1


int i; // declare loop index
int sum = 0;
for (i = 4; i >= 1; i--) // initialize loop index
sum += i;
...
i += 17; // use variable i

Figure 4.21 Declaring an index variable before the for loop


Examples
• TwelveDays.java (extra)
• Diamond.java (extra)
• Growth.java
• Mortgage.java (extra)
The StringTokenizer Class
• StringTokenizer(String str)
Constructor. Creates a new StringTokenizer object to parse str based
on white space
• StringTokenizer(String str, String delimiter)
Constructor. Creates a new StringTokenizer object to parse str based
on specified set of delimiteds
• int countTokens()
Returns the number of token still left to be processed in the string
• boolean hasMoreTokens()
Returns true if there are tokens still left to be processed in the string
• String nextToken()
Returns the next token in the string
do
statement
while (condition) ;

Figure 4.22 Syntax for the do-while statement


Do-while Statement
• A do-while statement checks the condition after
executing the loop body
• The loop body of a do-while statement is executed
at least once
• Do-while statements are suitable for writing loops
that are executed at least once
• DoGrowth.java
• Babylonian.java (extra)
do {
Compute balance as in Example 4.5
Ask the user -- Repeat or Quit?
} while (User chooses to repeat);

Figure 4.23 Pseudocode for example 4.5 enhancement


The char Type
• Java uses Unicode charater set (16 bits)
• ASCII, American Standard Code for Information
Interchange, is a seven-bit code used by other
language like C and C++
• ASCII is a subset of Unicode
• Keyword char to denote character type
• Character constants are quoted in single quotes,
e.g. ‘A’
• Ascii.java
Escape Sequence
• Escape sequence: preceding certain character with
the escape character \ for special meaning
• The newline, '\n', positions the next output at
the start of the next line
• The return, '\r', positions the next output at the
start of the curent line
• The backspace, '\b', positions the next output
one character to the left
• The tab, '\t', position the next output at the next
tab position
Escape Sequence
• The escape needs to be "escaped" when quoted
like '\\' and "\\"
• The single quote character must be "escaped" in
single quotes like '\''
• The double quote must be "escaped" in double
quotes like ”\”This is a quote\”"
• Special.java
Special Meaning
Character
\n newline, move to the start of the next line

\t tab

\b backspace

\r return, move to the start of the current line

\" double quote

\n newline, move to the start of the next line

\\backlash

 
Figure 4.24 Escape sequences for special characters
The byte, short, and long Types
• byte: one byte = 8 bits, range from -128 to 127
• short: two bytes = 16 bits
– range from -32,768 to 32,767
• int: four bytes = 32 bits
– range from -2,147,483,648 to 2,147,483,647
• long: eight bytes = 64 bits
– range 9,223,372,036,854,808 to 9,223,372,036,854,807
• int is the default for integer constant
• Integer constants can be made long by adding the
suffix l or L
The float Type
• float: four bytes = 32 bits
– Exponent can range from -45 to 48
– Min ~ -3.4E+38 with seven significant digits
– Max ~ 3.4E+38 with seven significant digits
• double: eight bytes = 64 bits
– Exponent can range from -324 to 308
– Min ~ -1.7E+308 with 16 significant digits
– Max ~ 1.7E+308 with 16 significant digits
• double is the default for real constants
• Make a number float by adding an f or F suffix
float good = 4.25f; // valid
float ok = (float)4.25; // valid
float bad = 4.25; // invalid
The Math Class
• In java.lang package
• Two static constants: E (base of natural log) and
PI (ratio of circumference of a circle to its
diameter)
• General functions
abs - absolute value
ceil - ceiling, smallest integer >= argument
floor - flooring, greatest integer <= argument
round - rounding, integer closest to argument
max - maximum of the two arguments
min - minimum of the two arguments
The Math Class
• Simple mathematical operations
sqrt(double a) - Return the square root of the argument
pow(double a, double b) - Returns of value of the first
argument raised to the power of the second argument
log(double a) - Returns the natural logarithm (base e) of
a double value
exp(double a) - Returns the exponential number e (i.e.,
2.718...) raised to the power of a double value
• Random number
random() - Returns a double value with a positive sign,
greater than or equal to 0.0 and less than 1.0
The Math Class
• Trigonometric functions
sin, cos, tan - sine, cosine, and tangent
asin, acos, atan- arc-sine, arc-cosine, and arc-tangent
atan2(double a, double b) - Returns the theta
component in the polar coordinates (r, theta)
corresponding to the point (b, a) in Cartesian
coordinates
• Degree/Radian conversion
toDegrees(double angrad) - Converts an angle in
radians to the equivalent angle measured in degrees
toRadians(double angdeg) - Converts an angle in
degrees to the equivalent angle measured in radians
The Math Class
• Library.java
• Toss.java
• CoinToss.java
16

(grains of rice)
Reward

4
2
1
1 2 4 8 12 16
Days

Figure 4.25 Size of the reward given each day


HHHHHHHHHHHHHHHHHTTTTTTTTTTTTTTTTTT

0.0 0.5 1.0


Heads Tails

Figure 4.26 Using random numbers to represent heads and tails


Iterative Development Cycle
• First iteration - CovertMenu.java (with stubs for
methods)
• Second iteration - CovertFromMetric.java
(implement MetricToEnglish())
• Third iteration - Convert.java (implement
EnglishToMetric())
Formulate the problem;
do {
Develop pseudocode;
Implement pseudocode in Java program;
Test program;
while (More subproblems to refine);

Figure 4.27 Iterative problem-solving process


do [
Display the menu;
Get the user's choice;
Execute the user's choice;
} while (user does not choose to quit);

Figure 4.28 Top-level Pseudocode


do {
System.out.println();
System.out.println("Choose from the following list");
System.out.println("1. Convert from meters to yds,ft,in");
System.out,println("2. Convert from yds,ft,in to meters");
System.out.println("3. Quit");
int choice = Io.readInt("Enter your choice, 1, 2 or 3");
switch (choice) {
case 1:
MetricToEnglish();
break;
case 2:
EnglishToMetric();
break;
case 3: System.out.println("Bye, Have a nice day");
}
} while (choice != 3);

Figure 4.29 Pattern for a menu-driven application


Input the number of meters, x, to convert;
Convert x meters to y yards;
Separate y into yInteger yards and yFraction yards;
Convert yFraction yards to f feet.
Separate f into fInteger feet and fFraction feet.
Convert fFraction feet to i inches.
Display the output.

Figure 4.30 Pseudocode for the MetricToEnglish method


if (yInteger > 0)
if (yInteger <= 1) Display yInteger yard;
else Display yInteger yards;
if (fInteger > 0)
if (fInteger <= 1) Display fInteger foot;
else Display fInteger feet;
if (i >0)
if (i <= 1) Display i inch;
else Display i inches;
if (yInteger == 0 && fInteger == 0 && i == 0)
Display 0 yards;

Figure 4.31 Refinement:Display the output


Input yards, feet, and inches to convert;
Convert to inches;
Convert inches to meters;
Output the result;

Figure 4.32 Pseudocode for the EnglishToMetric method

You might also like