Download Using while and do loops to make our programs take repeated actions

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Iteration and Loop Statements
Horstmann Chapter 7
Loop statements control repeated execution of a block
of statements
Each time the statements in the block are carried out, we
speak of one iteration of the loop
Structure of a Loop
1. Evaluate the continue-condition (a.k.a. the loop guard)
2. If the continue-condition is true, execute the loop body
and go back to 1
3. If the continue-condition is false, skip the loop body
entirely and continue with the next line of code
The WHILE loop
continuecondition?
false
while (i < 100)
{
true
System.out.print(".");
loop-body
statements
next statement
i++;
}
Printing 100 dots
i < 100?
false
int i = 0;
while (i < 100)
true
print dot
{
System.out.print(".");
i++
i++;
}
next statement
Another example
int count = 1;
while (count != 100)
{
System.out.print(count + " ");
count++;
}
Output:
1 2 3 4 5 6 7 8 9 10 11 12........97 98 99
Counting backwards
int count = 100;
while (count != 0)
{
System.out.print(count + " ");
count--;
}
Output:
100 99 98 97 96 95..............3 2 1
Add up some integers
1. Set 'sum' to zero
2. Read in an integer (from JOptionPane; convert to
int using Integer.parseInt()
3. While 'data' is not zero..
1. Add 'data' to 'sum';
2. Read in another integer into 'data'
4. Print out the value of 'sum'
Adding program
int sum;
int data;
String dataString;
dataString=JOptionPane.showInputDialog(null,”enter number:”);
data = Integer.parseInt(dataString);
while(data != 0)
{
dataString=JOptionPane.showInputMessage(null,”enter number:”);
data = Integer.parseInt(dataString);
sum = sum + data;
//could have used: sum += data;
}
JOptionPane.showMessageDialog(null,”Numbers sum to ”+sum);
What is wrong with this loop?
int count = 0;
while (count != 99)
{
System.out.print(count + " ");
count = count + 2;
}
Calculating the Growth of an
Investment
• Invest $10,000, 5% interest, compounded annually
Year
0
1
2
3
4
5
Balance
$10,000
$10,500
$11,025
$11,576.25
$12,155.06
$12,762.82
Growth of an investment
• How many years will it take a bank account
reached a particular balance?
while (balance < targetBalance)
{
year++;
double interest = balance * rate / 100;
balance = balance + interest;
}
Stand-alone growth program
class GrowBalance {
public static void main(String[] args){
double rate = 3.0;
double balance = 500.0;
double targetBalance = 1000.0
double year = 0;
while (balance < targetBalance)
{
year++;
double interest = balance * rate / 100;
balance = balance + interest;
System.out.println(“year ”+year+
“: balance ”+balance);
}
}
}
Object-based investment growth
public class Investment{
private double balance;
private double rate;
private int years;
public Investment(double aBalance, double aRate)
balance = aBalance;
rate = aRate;
years = 0;
}
public void waitForBalance(double targetBalance) {
while (balance < targetBalance){
years++;
double interest = balance * rate / 100;
balance = balance + interest;
}
}
public int getYears() {
return years;
}
public double getBalance(){ return balance; }
}
{
Test program to create investment objects
public class InvestmentTester
{
public static void main(String[] args)
{
final double INITIAL_BALANCE = 10000;
final double RATE = 5;
Investment invest = new Investment(INITIAL_BALANCE, RATE);
invest.waitForBalance(2 * INITIAL_BALANCE);
int years = invest.getYears();
System.out.println("The investment doubled after "
+ years + " years");
}
}
Sequence processing
Many tasks require the program to process a series of
numbers.
Question: how do we know when to stop?
Answer 1: know in advance how long the sequence is...
Answer 2: provide a sentinel value to signal the end...
Sample problems
1) Write a Java program that reads a sequence of positive
integer values, terminated by a -1, and calculate their average.
2) Modify your program so that it reads in 5 and only 5
numbers and then calculates their average.
Developing a WHILE loop
1. Decide on a loop guard. The loop will terminate when
this guard is false.
2. Set up initial conditions for loop. E.g. make sure
variables in the guard are initialized.
3. Write the 'work' part of the loop body
4. Write the 'change' part of the loop body. This must
potentially alter the value of the guard.
Things we know for certain
1. Before the loop: anything could be true
2. At the start of the loop body: the guard is guaranteed to
be true
3. Immediately after the loop body: the guard is guaranteed
to be false
Basic sequence operations
Reduction. E.g. finding the average of a sequence
Mapping: E.g. printing the square of each member of a
sequence
Filtering: E.g. doing something only with certain
sequence elements
Doing it all at once
Problem: Write a program which reads a sequence of positive
integer values, terminated by -1, and prints the average of the
square of the odd elements of the sequence.
1. Find the odd elements (filtering)
2. Compute their squares (mapping)
3. Calculate the average (reduction)
Related documents