Chapter 3 Control
Statements
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
The boolean Type and
Operators
Often 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);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
Comparison Operators
Operator Name
<
less than
<=
less than or equal to
>
greater than
>=
greater than or equal to
==
equal to
!=
not equal to
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
Boolean Operators
Operator Name
!
not
&&
and
||
or
exclusive or
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
Truth Table for
Operator !
p
!p
true
false
!(1 > 2) is true, because (1 > 2) is false.
false
true
!(1 > 0) is false, because (1 > 0) is true.
Example
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
Truth 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.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
Truth 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.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
Truth Table for
Operator ^
p1
p2
p1 ^ p2
false
false
false
false
true
true
true
false
true
true
true
false
Example
(2 > 3) ^ (5 > 1) is true, because (2 > 3)
is false and (5 > 1) is true.
(3 > 2) ^ (5 > 1) is false, because both (3
> 2) and (5 > 1) are true.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
The & and | Operators
&&: conditional AND operator
&: unconditional AND operator
||: conditional OR operator
|: unconditional OR operator
exp1 && exp2
(1 < x) && (x < 100)
(1 < x) & (x < 100)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
The & and | Operators
If x is 1, what is x after this
expression?
(x > 1) & (x++ < 10)
If x is 1, what is x after this
expression?
(1 > x) && ( 1 > x++)
How about (1 == x) | (10 > x++)?
(1 == x) || (10 > x++)?
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
10
Selection Statements
if Statements
switch Statements
Conditional Operators
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
11
Simple if Statements
if (booleanExpression) {
statement(s);
}
Boolean
Expression
true
Statement(s)
(A)
false
if (radius >= 0) {
area = radius * radius *
PI;
System.out.println("The
area"
+ " for the circle of
radius "
+ radius + " is " +
false
area);
(radius >= 0)
}
true
area = radius * radius * PI;
System.out.println("The area for the circle of " +
"radius " + radius + " is " + area);
(B)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
12
Note
Outer parentheses required
if ((i > 0) && (i < 10)) {
System.out.println("i is an " +
+ "integer between 0 and 10");
}
(a)
Braces can be omitted if the block contains a single
statement
Equivalent
if ((i > 0) && (i < 10))
System.out.println("i is an " +
+ "integer between 0 and 10");
(b)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
13
Caution
Adding a semicolon at the end of an if clause is
a common mistake.
if (radius >= 0); Wrong
{
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 nextline block style.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
14
The if...else
Statement
if (booleanExpression) {
statement(s)-for-the-true-case;
}
else {
statement(s)-for-the-false-case;
}
true
Statement(s) for the true case
Boolean
Expression
false
Statement(s) for the false case
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
15
if...else Example
if (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");
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
16
Multiple 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';
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
17
animation
Trace if-else statement
Suppose score is 70.0
The condition is false
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';
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
18
animation
Trace if-else statement
Suppose score is 70.0
The condition is false
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';
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
19
animation
Trace if-else statement
Suppose score is 70.0
The condition is true
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';
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
20
animation
Trace if-else statement
Suppose score is 70.0
grade is C
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';
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
21
animation
Trace if-else statement
Suppose score is 70.0
Exit the if statement
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';
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
22
Note
The else clause matches the most recent if clause
in the same block.
int i = 1;
int j = 2;
int k = 3;
Equivalent
int i = 1;
int j = 2;
int k = 3;
if (i > j)
if (i > k)
System.out.println("A");
else
System.out.println("B");
if (i > j)
if (i > k)
System.out.println("A");
else
System.out.println("B");
(a)
(b)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
23
Note, 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.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
24
TIP
if (number % 2 == 0)
even = true;
else
even = false;
(a)
Equivalent
boolean even
= number % 2 == 0;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
(b)
25
CAUTION
if (even == true)
System.out.println(
"It is even.");
(a)
Equivalent
if (even)
System.out.println(
"It is even.");
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
(b)
26
switch Statements
switch (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);
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
27
switch Statement Flow
Chart
status is 0
Compute tax for single filers
break
Compute tax for married file jointly
break
Compute tax for married file separatly
break
Compute tax for head of household
break
status is 1
status is 2
status is 3
default
Default actions
Next Statement
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
28
switch Statement Rules
The switchexpression must
switch (switch-expression)
yield a value of char,
{
byte, short, or int
case value1:
type and must
always be enclosed
statement(s)1;
in parentheses.
break;
The value1, ..., and valueN
case value2:
must have the same data
type as the value of the
statement(s)2;
switch-expression. The
break;
resulting statements in the
case statement are
case valueN:
executed when the value in
statement(s)N;
the case statement
matches the value of the
break;
switch-expression. Note
default: statement(s)-forthat value1, ..., and valueN
default;
are constant expressions,
}
meaning that they cannot
contain variables
the
Liang, Introductionin
to Java
Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
expression, such as 1 + rights
x. reserved. 0-13-222158-6
29
switch Statement Rules
The 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.
The default case, which is
optional, can be used to
perform actions when
none of the specified cases
matches the switchexpression.
switch (switch-expression)
{
case value1:
statement(s)1;
break;
case value2:
statement(s)2;
break;
case valueN:
statement(s)N;
The case statements
are executed in
break;
sequential order, but the order of the
default: statement(s)-forcases (including the default case) does
default;
not matter.
However, it is good
programming
style to follow the logical
}
sequence of the cases and place the
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
default case at the end.
rights reserved. 0-13-222158-6
30
animation
Trace switch statement
Suppose ch is 'a':
switch
case
case
case
}
(ch)
'a':
'b':
'c':
{
System.out.println(ch);
System.out.println(ch);
System.out.println(ch);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
31
animation
Trace switch statement
ch is 'a':
switch
case
case
case
}
(ch)
'a':
'b':
'c':
{
System.out.println(ch);
System.out.println(ch);
System.out.println(ch);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
32
animation
Trace switch statement
Execute this line
switch
case
case
case
}
(ch)
'a':
'b':
'c':
{
System.out.println(ch);
System.out.println(ch);
System.out.println(ch);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
33
animation
Trace switch statement
Execute this line
switch
case
case
case
}
(ch)
'a':
'b':
'c':
{
System.out.println(ch);
System.out.println(ch);
System.out.println(ch);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
34
animation
Trace switch statement
Execute this line
switch
case
case
case
}
(ch)
'a':
'b':
'c':
{
System.out.println(ch);
System.out.println(ch);
System.out.println(ch);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
35
animation
Trace switch statement
Execute next statement
switch
case
case
case
}
(ch)
'a':
'b':
'c':
{
System.out.println(ch);
System.out.println(ch);
System.out.println(ch);
Next statement;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
36
animation
Trace switch statement
Suppose ch is 'a':
switch (ch) {
case 'a': System.out.println(ch);
break;
case 'b': System.out.println(ch);
break;
case 'c': System.out.println(ch);
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
37
animation
Trace switch statement
ch is 'a':
switch (ch) {
case 'a': System.out.println(ch);
break;
case 'b': System.out.println(ch);
break;
case 'c': System.out.println(ch);
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
38
animation
Trace switch statement
Execute this line
switch (ch) {
case 'a': System.out.println(ch);
break;
case 'b': System.out.println(ch);
break;
case 'c': System.out.println(ch);
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
39
animation
Trace switch statement
Execute this line
switch (ch) {
case 'a': System.out.println(ch);
break;
case 'b': System.out.println(ch);
break;
case 'c': System.out.println(ch);
}
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
40
animation
Trace switch statement
Execute next statement
switch (ch) {
case 'a': System.out.println(ch);
break;
case 'b': System.out.println(ch);
break;
case 'c': System.out.println(ch);
}
Next statement;
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
41
Conditional Operator
if (x > 0)
y=1
else
y = -1;
is equivalent to
y = (x > 0) ? 1 : -1;
(booleanExpression) ? expression1 : expression2
Ternary operator
Binary operator
Unary operator
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
42
Conditional Operator
if (num % 2 == 0)
System.out.println(num + is even);
else
System.out.println(num + is odd);
System.out.println(
(num % 2 == 0)? num + is even :
num + is odd);
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
43
JDK 1.5
Feature
Formatting Output
Use the new JDK 1.5 printf statement.
System.out.printf(format, items);
Where format is a string that may consist of substrings and
format specifiers. A format specifier specifies how an item
should be displayed. An item may be a numeric value,
character, boolean value, or a string. Each specifier begins
with a percent sign.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
44
Frequently-Used
Specifiers
JDK 1.5
Feature
Specifier Output
Example
%b
a boolean value
true or false
%c
a character
'a'
%d
a decimal integer
200
%f
a floating-point number
45.460000
%e
a number in standard scientific notation
4.556000e+01
%s
a string
"Java is cool"
int count = 5;
items
double amount = 45.56;
System.out.printf("count is %d and amount is %f", count, amount);
display
count is 5 and amount is 45.560000
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
45
Creating Formatted
Strings
System.out.printf(format, item1, item2, ..., item k)
String.format(format, item1, item2,
..., itemk)
String s = String.format("count is %d and amount is
%f", 5, 45.56));
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
46
Operator Precedence
How to evaluate 3 + 4 * 4 > 5 * (4 + 3) 1?
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
47
Operator Precedence
var++, var-+, - (Unary plus and minus), ++var,--var
(type) Casting
! (Not)
*, /, % (Multiplication, division, and remainder)
+, - (Binary addition and subtraction)
<, <=, >, >= (Comparison)
==, !=; (Equality)
& (Unconditional AND)
^ (Exclusive OR)
| (Unconditional OR)
&& (Conditional AND) Short-circuit AND
|| (Conditional OR) Short-circuit OR
=, +=, -=, *=, /=, %= (Assignment operator)
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All
rights reserved. 0-13-222158-6
48