 # Loops: Handling Infinite Processes CS 21a: Introduction to Computing I First Semester, 2013-2014.

## Presentation on theme: "Loops: Handling Infinite Processes CS 21a: Introduction to Computing I First Semester, 2013-2014."— Presentation transcript:

Loops: Handling Infinite Processes CS 21a: Introduction to Computing I First Semester, 2013-2014

What’s a Loop? ► A way to express a constant number of repetitions ► A way to express an arbitrary number of repetitions, usually based on some input value or condition

Loops ► Java structures for loops: ► for statement ► while statement ► do-while statement

Example: Compound Interest public class BankAccount {... public void yearlyInterest() { double interest = balance*intRate/100; balance += interest; years++; println( "Interest:" + interest + ", balance is now" + balance ); }... }

Repeatedly Applying Interest ► Suppose you want to apply interest on the balance for three years public void applyThreeYearInterest( ) { double interest; interest = balance*intRate/100; balance += interest; years++; println( "Year 1 - interest:" + interest + ", balance:" + balance ); interest = balance*intRate/100; balance += interest; years++; println( "Year 2 - interest:" + interest + ", balance:" + balance ); interest = balance*intRate/100; balance += interest; years++; println( "Year 3 - interest:" + interest + ", balance:" + balance ); }

Repeated Execution

The Power of Loops ► Allow an arbitrarily long process to be described with a short algorithm

The for Statement ► Syntax for ( expr1; expr2; expr3 ) statement ► Notes ► expr1: initialization or setup (e.g., i = 1 ) ► expr2: condition (e.g., i <= 3 ) ► expr3: increment (e.g., i++ ) ► statement means any valid statement in Java (including blocks)

Applying Yearly Interest 3 Times public void applyThreeYearInterest( ) { double interest; int i; for( i = 1; i <= 3; i++) { interest = balance*intRate/100; balance += interest; print( "Year " + i + "- interest: " + interest ); println( ", balance:" + balance ); years++; }

First Use of Loops ► Express a repetitive process, where the number of repetitions is constant. ► Problem can still be solved without loops, but coding is too tedious without it. ► Becomes more useful as the constant grows larger.

Applying Yearly Interest An Arbitrary Number of Times public void applyYearlyInterest( int numYears ) { double interest; int i; for( i = 1; i <= numYears; i++) { interest = balance*intRate/100; balance += interest; print( "Year " + i + "- interest: " + interest ); println( ", balance:" + balance ); years++; }

Second (More Important) Use of Loops

Practice Programming Problem

public int factorial( int n ) { int result = 1; int i = 1; while ( i <= n ) { result = result * i; i = i + 1; } return result; } The while Statement ► Syntax while ( condition ) statement Setup Condition Loop Body Increment / go to next step

public int factorial( int n ) { int result = 1; int i = 1; do { result = result * i; i = i + 1; } while ( i <= n ); return result; } The do-while Statement ► Syntax do statement while ( condition ); Setup Loop Body Increment / go to next step Condition

Components of a Loop ► Setup/Initialization ► Terminating/Continuing condition ► Incrementing step ► not necessarily an increment, but something that moves the program further on – i.e., to a state possibly closer to a terminating condition ► e.g., decrementing, dividing, multiplitying, getting another input, etc. ► Loop body

Using a for Loop for Factorial public int factorial( int n ) { int result = 1; int i; for ( i = 1; i <= n; i++ ) { result = result * i; } return result; } Setup Condition Loop Body Increment / go to next step

for Loop (version 2) public int factorial( int n ) { int result; result = 1; for ( int i = 1; i <= n; i++ ) { result = result * i; } return result; } You can declare the "counter" variable inside the for  scope is within the loop's block  good when i is not used outside the loop

for Loop (version 3) public int result( int n ) { int i, result; for ( result = 1, i = 1; i <= n; i++ ) { result = result * i; } return result; } You can have multiple statements in the "setup" part of for  separated by commas  need to declare the variables before the for, since we can't have declarations here  also works for the increment part NOT RECOMMENDED!  generally bad style to put several statements on one line  if possible, choose a single counter variable, and just use that

for Loop (version 3b) public int factorial( int n ) { int i, result; for ( result = 1, i = 1; i <= n; result *= i, i++ ) { } return result; } Shorthand for: result = result * i; This is legal, but BAD!  cryptic  The for loop has no body!

for Loop (version 3w) public int factorial( int n ) { int i, result; for ( result = 1, i = 1; i <= n; result *= i++ ) { } return result; } ("w" for worse!)  even more cryptic  Some C programmers actually like writing like this!  DON'T!

for and while are equivalent! public int factorial( int n ) { int result; result = 1; for ( int i = 1; i <= n; i++ ) { result = result * i; } return result; } public int factorial( int n ) { int result; result = 1; { int i = 1; while ( i <= n ) { result = result * i; i++; } return result; } Increment Setup Condition Braces here are shown because in Java (not in C), scope of variables declared in setup of for is limited

Deciding which Statement to Use ► Using a for statement ► most appropriate when the number of iterations is easily known (e.g., factorial) ► Difference between while and do-while ► loop condition is performed at the top (while) or at the bottom (do-while) of the loop ► In do-while, body is executed at least once ► in while, we check first before executing

Practice Programming Problem ► Write a program that reads numbers from console input and prints them out, one on each line, until a zero is encountered (don’t print out the zero). Identify the setup, condition, and increment. Is this a bounded or a conditional iteration? ► Sample InputSample Output 1 2 31 4 52 03 4 5

Practice Programming Problem

What’s Wrong with This Code // assume grandmasFavoriteNumber is a positive integer for(int i = 0; i != grandmasFavoriteNumber; i++) ; println("It took " + i + " iterations to guess grandma's fave number."); // What’s a better way to write this?

What’s Wrong with This Code? int years = 0; while ( years < 20 ) { double interest = balance * rate / 100; balance = balance + interest; }

What’s Wrong with This Code? int years = 20; while ( years > 0 ) { years++; double interest = balance * rate / 100; balance = balance + interest; }

What’s Wrong with This Code? float count = 0.0f; while ( count != 1.0f ) { count = count + 0.3333333f; } // How would you fix it?

What’s Wrong with This Code? void derpNTimes(int n) { for(int i = 1; i < n; i++) println("derp"); }

What’s Wrong with This Code? void derpNTimes(int n) { for(int i = 0; i <= n; i++) println("derp"); }

Avoiding Pitfalls ► Infinite Loop ► loop body or increment statement should contain a statement that eventually leads to termination ► Real Numbers ► Avoid using == or != when using real numbers ► Use = depending on direction of loop

Avoiding Pitfalls ► OBOE (Off-By-One-Error) aka "Fencepost error" ► To execute the loop body N times … ► if counter starts at 0, check for counter < N ► if counter starts at 1, check for counter <= N ► Remember that after the loop, the counter (if still in scope) will be beyond the limit of your condition ► if we started from 0, counter would be N, ► if we started from 1, counter would be N+1

Nested Loops ► It is possible to have a loop within a loop ► Example (What gets printed out?) for ( int i = 0; i < 5; i++ ) { println( i ); for ( int j = 0; j < 5; j++ ) { print(" " + j ); } println(); }

Nested Loops ► The condition can vary depending on the outer loop ► Example (What gets printed out?) for ( int i = 0; i < 5; i++ ) { println( i ); for ( int j = 0; j < i; j++ ) { print( " " + j ); } println( ); }

Practice Programming Problem

How to Avoid Confusion with Nested Loops ► Focus on one loop at a time. ► Abstract away the inner loop.

Printing a Shape ► Create a triangle pattern * ** *** ► Loop through rows for ( int i = 1; i <= n; i++ ) { // make triangle row }

Printing a Shape (continued) ► The following loop creates a row of i stars for ( int j = 1; j <= i; j++ ) r = r + "*"; r = r + "\n"; ► Put loops together → Nested loops String r = "" ; for ( int i = 1; i <= n; i++ ) { // make triangle row }

Triangle Class public class Triangle { private int width; public Triangle( int aWidth ) { width = aWidth; } public String toString() { String r = ""; for ( int i = 1; i <= width; i++ ) { for ( int j = 1; j <= i; j++ ) r = r + "*"; r = r + "\n"; } return r; }

TriangleRunner Class public class TriangleRunner { public static void main(String[] args) { Triangle small = new Triangle(3); System.out.println(small.toString()); Triangle large = new Triangle(15); System.out.println(large); } By the way, the built-in print methods calls the toString method automatically

Practice Programming Problem ► Create classes to print these shapes: * * * * * * * * * * * * * * * * * * *

Download ppt "Loops: Handling Infinite Processes CS 21a: Introduction to Computing I First Semester, 2013-2014."

Similar presentations