Programming in Java (COP 2250)
Lecture 12 & 13
Chengyong Yang
Fall, 2005
12-2
Outline
Comparing Data
The while Statement
Iterators
Other Repetition Statements
Decisions and Graphics
More Components
12-3
Comparing Data
When comparing data using boolean expressions,it's important to understand the nuances of certaindata types
Let's examine some key situations:
Comparing floating point values for equality
Comparing characters
Comparing strings (alphabetical order)
Comparing object vs. comparing object references
12-4
Comparing Float Values
You should rarely use the equality operator (==)when comparing two floating point values (floator double)
Two floating point values are equal only if theirunderlying binary representations match exactly
Computations often result in slight differences thatmay be irrelevant
In many situations, you might consider twofloating point numbers to be "close enough" evenif they aren't exactly equal
12-5
Comparing Float Values
To determine the equality of two floats, you maywant to use the following technique:
if (Math.abs(f1 - f2) < TOLERANCE)
   System.out.println ("Essentially equal");
If the difference between the two floating pointvalues is less than the tolerance, they areconsidered to be equal
The tolerance could be set to any appropriatelevel, such as 0.000001
12-6
Comparing Characters
As we've discussed, Java character data is basedon the Unicode character set
Unicode establishes a particular numeric value foreach character, and therefore an ordering
We can use relational operators on character databased on this ordering
For example, the character '+' is less than thecharacter 'J' because it comes before it in theUnicode character set
Appendix C provides an overview of Unicode
12-7
Comparing Characters
In Unicode, the digit characters (0-9) arecontiguous and in order
Likewise, the uppercase letters (A-Z) andlowercase letters (a-z) are contiguous and in order
Characters
Unicode Values
0 – 9
48 through 57
A – Z
65 through 90
a – z
97 through 122
12-8
Comparing Strings
Remember that in Java a character string is anobject
The equals method can be called with strings todetermine if two strings contain exactly the samecharacters in the same order
The equals method returns a boolean result
if (name1.equals(name2))
   System.out.println ("Same name");
12-9
Comparing Strings
We cannot use the relational operators to comparestrings
The String class contains a method calledcompareTo to determine if one string comesbefore another
A call to name1.compareTo(name2)
returns zero if name1 and name2 are equal (contain thesame characters)
returns a negative value if name1 is less than name2
returns a positive value if name1 is greater than name2
12-10
Comparing Strings
if (name1.compareTo(name2) < 0)
   System.out.println (name1 + "comes first");
else
   if (name1.compareTo(name2) == 0)
      System.out.println ("Same name");
   else
      System.out.println (name2 + "comes first");
Because comparing characters and strings isbased on a character set, it is called alexicographic ordering
12-11
Lexicographic Ordering
Lexicographic ordering is not strictly alphabeticalwhen uppercase and lowercase characters aremixed
For example, the string "Great" comes before thestring "fantastic" because all of the uppercaseletters come before all of the lowercase letters inUnicode
Also, short strings come before longer stringswith the same prefix (lexicographically)
Therefore "book" comes before "bookcase"
12-12
Comparing Objects
The == operator can be applied to objects – itreturns true if the two references are aliases ofeach other
The equals method is defined for all objects, butunless we redefine it when we write a class, it hasthe same semantics as the == operator
It has been redefined in the String class tocompare the characters in the two strings
When you write a class, you can redefine theequals method to return true under whateverconditions are appropriate
12-13
Outline
Comparing Data
The while Statement
Iterators
Other Repetition Statements
Decisions and Graphics
More Components
12-14
Repetition Statements
Repetition statements allow us to execute astatement multiple times
Often they are referred to as loops
Like conditional statements, they are controlled byboolean expressions
Java has three kinds of repetition statements:
the while loop
the do loop
the for loop
The programmer should choose the right kind ofloop for the situation
12-15
The while Statement
while statement has the following syntax:
while ( condition )
   statement;
If the condition is true, the statement isexecuted
Then the condition is evaluated again, and if it isstill true, the statement is executed again
The statement is executed repeatedly until thecondition becomes false
12-16
Logic of a while Loop
statement
true
false
condition
evaluated
12-17
The while Statement
An example of a while statement:
int count = 1;
while (count <= 5)
{
   System.out.println (count);
   count++;
}
If the condition of a while loop is false initially, thestatement is never executed
Therefore, the body of a while loop will executezero or more times
12-18
The while Statement
Let's look at some examples of loop processing
A loop can be used to maintain a running sum
sentinel value is a special input value thatrepresents the end of input
See Average.java (page 229)
A loop can also be used for input validation,making a program more robust
See WinPercentage.java (page 231)
12-19
Infinite Loops
The body of a while loop eventually must makethe condition false
If not, it is called an infinite loop, which willexecute until the user interrupts the program
This is a common logical error
You should always double check the logic of aprogram to ensure that your loops will terminatenormally
12-20
Infinite Loops
An example of an infinite loop:
int count = 1;
while (count <= 25)
{
   System.out.println (count);
   count = count - 1;
}
This loop will continue executing until interrupted(Control-C) or until an underflow error occurs
12-21
Nested Loops
Similar to nested if statements, loops can benested as well
That is, the body of a loop can contain anotherloop
For each iteration of the outer loop, the inner loopiterates completely
See PalindromeTester.java (page 235)
12-22
Nested Loops
How many times will the string "Here" be printed?
count1 = 1;
while (count1 <= 10)
{
   count2 = 1;
   while (count2 <= 20)
   {
      System.out.println ("Here");
      count2++;
   }
   count1++;
}
10 * 20 = 200
12-23
Outline
Comparing Data
The while Statement
Iterators
Other Repetition Statements
12-24
Iterators
An iterator is an object that allows you to processa collection of items one at a time
It lets you step through each item in turn andprocess it as needed
An iterator object has a hasNext method thatreturns true if there is at least one more item toprocess
The next method returns the next item
Iterator objects are defined using the Iteratorinterface, which is discussed further in Chapter 6
12-25
Iterators
Several classes in the Java standard class libraryare iterators
The Scanner class is an iterator
the hasNext method returns true if there is more data tobe scanned
the next method returns the next scanned token as astring
The Scanner class also has variations on thehasNext method for specific data types (such ashasNextInt)
12-26
Iterators
The fact that a Scanner is an iterator isparticularly helpful when reading input from a file
Suppose we wanted to read and process a list ofURLs stored in a file
One scanner can be set up to read each line of theinput until the end of the file is encountered
Another scanner can be set up for each URL toprocess each part of the path
See URLDissector.java (page 240)
12-27
Outline
Comparing Data
The while Statement
Iterators
Other Repetition Statements
12-28
The do Statement
do statement has the following syntax:
do
{
   statement;
}
while ( condition )
The statement is executed once initially, and thenthe condition is evaluated
The statement is executed repeatedly until thecondition becomes false
12-29
Logic of a do Loop
true
condition
evaluated
statement
false
12-30
The do Statement
An example of a do loop:
The body of a do loop executes at least once
See ReverseNumber.java (page 244)
int count = 0;
do
{
   count++;
   System.out.println (count);
} while (count < 5);
12-31
Comparing while and do
statement
true
false
condition
evaluated
The while Loop
true
condition
evaluated
statement
false
The do Loop
12-32
The for Statement
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 atthe end of each iteration
12-33
Logic of a for loop
statement
true
condition
evaluated
false
increment
initialization
12-34
The for Statement
for loop is functionally equivalent to thefollowing while loop structure:
initialization;
while ( condition )
{
   statement;
   increment;
}
12-35
The for Statement
An example of a for loop:
for (int count=1; count <= 5; count++)
   System.out.println (count);
The initialization section can be used to declare avariable
Like a while loop, the condition of a for loop istested prior to executing the loop body
Therefore, the body of a for loop will execute zeroor more times
12-36
The for Statement
The increment section can perform any calculation
for loop is well suited for executing statementsa specific number of times that can be calculatedor determined in advance
See Multiples.java (page 248)
See Stars.java (page 250)
for (int num=100; num > 0; num -= 5)
   System.out.println (num);
12-37
The for Statement
Each expression in the header of a for loop isoptional
If the initialization is left out, no initialization isperformed
If the condition is left out, it is always consideredto be true, and therefore creates an infinite loop
If the increment is left out, no increment operationis performed