Chapter 4 - Control Statements
Chapter 4 - Control Statements
Conditions
Throughout this chapter, you’ll see if statements and
loop statements where conditions appear within a pair
of parentheses, like this:
if (<condition>)
{
...
}
while (<condition>)
{
...
}
Typically, each condition involves some type of
comparison and the comparisons use comparison
operators….
3
Conditions
Here are Java's comparison operators:
==, !=, <, >, <=, >=
Each comparison operator evaluates to either true or
false.
==
Tests two operands for equality.
3 == 3 evaluates to true
3 == 4 evaluates to false
Note that == uses two equal signs, not one!
!=
Tests two operands for inequality.
The != operator is pronounced “not equal.”
The <, >, <=, and >= operators work as expected.
4
if Statement
Use an if statement if you need to ask a question in
order to determine what to do next.
There are three forms for an if statement:
if by itself
Use for problems where you want to do something or nothing.
if, else
Use for problems where you want to do one thing or another
thing.
if, else if
Use for problems where you want to do one thing out of three or
more choices.
5
if Statement
pseudocode syntax Java syntax
if by itself: if by itself:
if <condition> if (<condition>)
<statement(s)> {
<statement(s)>
}
if Statement
pseudocode syntax Java syntax
if, else if: if, else if, else:
if <condition> if (<condition>)
<statement(s)> {
else if <condition> <statement(s)>
<statement(s)> }
. else if (<condition>)
. {
more else if's here (optional)
. <statement(s)>
else }
<statement(s)> optional .
.
. more else if's here (optional)
else
{
<statement(s)> optional
}
7
if Statement
Write a complete program that prompts the user to
enter a sentence and then prints an error message if
the last character is not a period.
sample session: Italics indicates input. Never hardcode
(include) input as part of your source code!!!
Enter a sentence:
Permanent good can never be the outcome of violence
Invalid entry – your sentence needs a period!
10
|| Logical Operator
Provide code that prints "bye" if a response variable
contains a lowercase or uppercase q (for quit). Here’s
a pseudocode implementation:
if response equals “q” or “Q”
print “Bye”
|| Logical Operator
It’s a common bug to forget to repeat a variable that’s part of an
|| (or &&) condition. This code generates a compilation error:
if (response.equals(″q″ || ″Q″))
{
System.out.println("bye");
}
Another common bug is to use the == operator to compare
strings for equality. This code compiles successfully, but it doesn’t
work properly:
if (response == ″q″ || response == ″Q″)
{
System.out.println("bye");
}
16
|| Logical Operator
As an alternative to using the || operator with two
equals method calls, you could use an
equalsIgnoreCase method call like this:
if (response.equalsIgnoreCase("q"))
{
System.out.println("Bye");
}
17
! Logical Operator
The ! (not) operator reverses the truth or falsity of a
condition.
For example, suppose that a char variable named
reply holds a q (lowercase or uppercase) if the user
wants to quit, or some other character if the user
wants to continue. To check for "some other
character" (i.e., not a q or Q), use the ! operator like
this:
if (!(reply == 'q' || reply == 'Q'))
{
System.out.println("Let's get started....");
...
18
switch Statement
When to use a switch statement:
If you need to do one thing from a list of multiple possibilities.
Note that the switch statement can always be replaced by an
if, else if, else statement, but the switch statement is
considered to be more elegant. (Elegant code is easy to
understand, easy to update, robust, reasonably compact, and
efficient.)
Syntax:
switch (<controlling-expression>)
{
case <constant1>:
<statements>;
break;
case <constant2>:
<statements>;
break;
...
default:
<statements>;
} // end switch
19
switch Statement
How the switch statement works:
Jump to the case constant that matches the controlling
expression's value (or jump to the default label if there are
no matches) and execute all subsequent statements until
reaching a break.
The break statement causes a jump out of the switch
statement (below the "}").
Usually, break statements are placed at the end of every
case block. However, that's not a requirement and they're
sometimes omitted for good reasons.
Put a : after each case constant.
Even though statements following the case constants are
indented, { }'s are not necessary.
The controlling expression should evaluate to either an int
or a char.
Proper style dictates including "// end switch" after the
switch statement's closing brace.
20
switch Statement
Given this code fragment:
i = stdIn.nextInt();
switch (i)
{
case 1:
System.out.print("A");
break;
case 2:
System.out.print("B");
case 3: case 4:
System.out.print("C-D");
break;
default:
System.out.print("E-Z");
} // end switch
If input = 1, what's the output?
If input = 2, what's the output?
If input = 3, what's the output?
If input = 4, what's the output?
If input = 5, what's the output?
21
switch Statement
Write a program that reads in a ZIP Code and uses
the first digit to print the associated geographic area:
if zip code print this
begins with message
0, 2, 3<zip> is on the East Coast.
4-6 <zip> is in the Central Plains area.
7 <zip> is in the South.
8-9 <zip> is in the West.
other <zip> is an invalid ZIP Code.
Note: <zip> represents the entered ZIP Code value.
23
while Loop
Use a loop statement if you need to do the same thing
repeatedly.
pseudocode syntax Java syntax
while <condition> while (<condition>)
<statement(s)> {
<statement(s)>
}
24
21
while Loop
Write a main method that finds the sum of user-
entered integers where -99999 is a sentinel value.
public static void main(String[] args)
{
Scanner stdIn = new Scanner(System.in);
int sum = 0; // sum of user-entered values
int x; // a user-entered value
System.out.print("Enter an integer (-99999 to quit): ");
x = stdIn.nextInt();
while (x != -99999)
{
sum = sum + x;
System.out.print("Enter an integer (-99999 to quit): ");
x = stdIn.nextInt();
}
System.out.println("The sum is " + sum);
} // end main
25
do Loop
When to use a do loop:
If you know that the repeated thing will always have to be
done at least one time.
Syntax:
do
{
<statement(s)>
} while (<condition>);
Note:
The condition is at the bottom of the loop (in contrast to the
while loop, where the condition is at the top of the loop).
The compiler requires putting a ";" at the very end, after the
do loop's condition.
Proper style dictates putting the "while" part on the same
line as the "}"
26
do Loop
Problem description:
As part of an architectural design program, write a main
method that prompts the user to enter length and width
dimensions for each room in a proposed house so that total
floor space can be calculated for the entire house.
After each length/width entry, ask the user if there are any
more rooms.
Print the total floor space.
28
for Loop
When to use a for loop:
If you know the exact number of loop iterations before the
loop begins.
For example, use a for loop to:
Print this countdown from 10.
Sample session:
10 9 8 7 6 5 4 3 2 1 Liftoff!
Find the factorial of a user-entered number.
Sample session:
Enter a whole number: 4
4! = 24
29
for Loop
for loop syntax for loop example
for (<initialization>; <condition>; <update>) for (int i=10; i>0; i--)
{ {
<statement(s)> System.out.print(i + " ");
} }
System.out.println("Liftoff!");
for Loop
Trace this code fragment with an input value of 3.
Scanner stdIn = new Scanner(System.in);
int number; // user entered number
double factorial = 1.0; // factorial of user entry
for Loop
Write a main method that prints the squares for
each odd number between 1 and 99.
Output:
1
9
25
49
81
...
32
Loop Comparison
When to use Template
for loop: If you know, prior to for (int i=0; i<max; i++)
the start of loop, how {
many times you want <statement(s)>
to repeat the loop. }
Nested Loops
Nested loops = a loop within a loop.
Example – Write a program that prints a rectangle of
characters where the user specifies the rectangle's
height, the rectangle's width, and the character's
value.
Sample session:
Enter height: 4
Enter width: 3
Enter character: <
<<<
<<<
<<<
<<<
38
Boolean Variables
Programs often need to keep track of the state of some
condition.
For example, if you're writing a program that simulates the
operations of a garage door opener, you'll need to keep track of
the state of the garage door's direction - is the direction up or
down? You need to keep track of the direction "state" because
the direction determines what happens when the garage door
opener's button is pressed. If the direction state is up, then
pressing the garage door button causes the direction to switch to
down. If the direction state is down, then pressing the garage
door button causes the direction to switch to up.
To implement the state of some condition, use a boolean
variable.
39
Boolean Variables
A boolean variable is a variable that:
Is declared to be of type boolean.
Holds the value true or the value false.
Boolean variables are good at keeping track of the
state of some condition when the state has one of two
values. For example:
Boolean Variables
This code fragment initializes an upDirection
variable to true and shows how to toggle its value
within a loop.
boolean upDirection = true;
do
{ If upDirection holds
the value true, this
...
statement changes it to
upDirection = !upDirection; false, and vice versa.
...
} while (<user presses the garage door opener button>);
41
Boolean Variables
import java.util.Scanner;
do
{
System.out.print("Press Enter, or enter 'q' to quit: ");
entry = stdIn.nextLine();
Boolean Variables
if (inMotion)
{
if (upDirection)
{
System.out.println("moving up");
}
else
{
System.out.println("moving down");
}
}
else
{
System.out.println("stopped");
upDirection = !upDirection; // direction reverses at stop
}
} // end if entry = ""
} while (entry.equals(""));
} // end main
} // end GarageDoor class
43
Input Validation
boolean variables are often used for input validation.
Input validation is when a program checks a user's
input to make sure it's valid, i.e., correct and
reasonable. If it's valid, the program continues. If it's
invalid, the program enters a loop that warns the user
about the erroneous input and then prompts the user
to re-enter.
In the GarageDoor program, note how the program
checks for an empty string (which indicates the user
wants to continue), but it doesn't check for a q.
44
Input Validation
To add input validation to the GarageDoor program, replace the
GarageDoor program's prompt with the following code. It
forces the user to press Enter or enter a q or Q.
validEntry = false;
do
{
System.out.print("Press Enter, or enter 'q' to quit: ");
entry = stdIn.nextLine();
if (entry.equals("") || entry.equalsIgnoreCase("q"))
{
validEntry = true;
}
else
{
System.out.println("Invalid entry.");
}
} while (validEntry == false);
What is a more elegant
implementation for this?
45
Boolean Logic
Boolean logic (= Boolean algebra) is the formal logic
that determines how conditions are evaluated.
The building blocks for Boolean logic are things that
you've already seen - the logical operators &&, ||, and
!.
Logical operator review:
For the && operator, both sides need to be true for the whole
thing to be true.
For the || operator, only one side needs to be true for the
whole thing to be true.
The ! operator reverses the truth or falsity of something.
46