COMP-202 Unit 4: Programming with Iterations Doing the same thing again and again and again and again and again and again and again and again and again... CONTENTS: While loops Class (static) variables and constants Top Down Programming For loops Nested Loops
Repetition Statements Repetition statements allow us to execute a block of code or (set of) statement(s) multiple times; -These statements are normally called loops COMP-202 - Programm 2
Repetition Statements in Java -Java has two main kinds of repetition statements: the while loop and the for loop - While and for loops are equivalent However, in certain circumstances, choosing one of these statements over the other results in a program that is easier to understand. COMP-202 - Programm 3
Part 1: While loops
Recall : If statement if (condition) { //some code here... //code here happens regardless COMP-202 - Programm 5
Recall : If statement if (condition) { //some code here... //code here happens regardless An if statement defines a block of code. COMP-202 - Programm 6
Recall : If statement if (condition) { //some code here... //code here happens regardless We test a condition which can be any boolean expression. COMP-202 - Programm 7
Recall : If statement if (condition) { //some code here... //code here happens regardless If the condition evaluates to true then we execute the block of code once. Otherwise we do not. COMP-202 - Programm 8
Benefits of If Statements We can perform actions or commands some of the time but not all. Forces us to organize things : Certain events will only happen in one case. This creates a clear division. COMP-202 - Programm 9
Doing the same thing many times Sometimes, we will want to execute the same block of code many times. How can we do that? COMP-202 - Programm 10
Copy / Paste The naïve thing to do is copy paste your code. What are some problems with this? COMP-202 - Programm 11
Copy / Paste 1)Annoying : Who wants to copy / paste that much 2)Error prone : Easy to make a mistake 3)Difficult to maintain : Hard to edit or fix mistakes (you have to edit the same code many times which can lead to more errors) 4)What if you don't know ahead of time how many steps you need? COMP-202 - Programm 12
while loops In Java, we can create a while loop. A while loop is a statement that defines a block of code that continues to execute until a condition is false. COMP-202 - Programm 13
if statement vs while loop if (condition) { //block of code //Go here //no matter what while (condition) { //block of code //repeat condition // check //Go here //only after //condition is false COMP-202 - Programm 14
Syntax difference Syntactically, the only difference between a while loop and an if statement is the word while instead of if. The effect of this change is that the block of code continues to be repeated as long as condition is evaluated to be true. COMP-202 - Programm 15
Doing things multiple times There is no command in Java to perform the same thing many times. However, if we are clever with our variables, we can write code that will execute many times. Remember we will keep on repeating the body of a while loop as long as a condition is true. COMP-202 - Programm 16
Use a variable to count Idea: 1)Create a variable and set it equal to 0. 2)Every time our loop body executes, add one to this variable 3)At any point, the variable's value will be equal to the number of steps we've done so far. We can then check as a condition for the while loop that the number of steps is less than any desired number. COMP-202 - Programm 17
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; COMP-202 - Programm 18
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; The purpose of the variable x here is to act as a loop counter It keeps track of how many times the loop has executed COMP-202 - Programm 19
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; Initially, we set the variable x equal to 0. This means the first time we check the condition x < 4, the condition is true, so we execute the loop body. COMP-202 - Programm 20
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; Next, we execute the loop body, which first involves printing to the screen. COMP-202 - Programm 21
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; The next command of the loop body is increment x. This gives x the value of 1. COMP-202 - Programm 22
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; Once the loop body finishes at the, the condition is then rechecked. Since x = 1 and 1 < 4, the block of code happens again. COMP-202 - Programm 23
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; This procedure happens 2 more times. On the 4 th step, we test the condition and x = 3. Then after printing and adding 1 to x, x is now 4. COMP-202 - Programm 24
Example of a while loop int x = 0; while (x < 4) { System.out.println( I have to write + this over and over. ); x++; If x == 4, then the condition is false, so we exit the loop and resume the code after the loop block has finished. COMP-202 - Programm 25
Definition: iteration An iteration is a single execution of the instructions in the loop body. The previous loop had 4 iterations. One each for x=0, x=1, x=2, x=3
Important Clarification The condition of the while loop is only evaluated 1 time per step or iteration of the loop right before the block of code executes. The significance of this is if the condition changes inside the loop, the loop will keep going. COMP-202 - Programm 27
Important Clarification int x = 0; while (x < 4) { x = x + 10; System.out.println( x is now 10 ); x = x - 10; x++; COMP-202 - Programm 28
Important Clarification int x = 0; while (x < 4) { x = x + 10; System.out.println( x is now 10 ); x = x - 10; x++; Although x = 10 at this point, the loop condition is not tested until later, when x=1 again COMP-202 - Programm 29
Practice Exercise: Figure out what the following loop does. int i = 0; while (i < 100) { if ( i % 3 == 0) { System.out.println(i); i++; COMP-202 - Programm 30
Practice Exercise: Since i % 3 == 0 for any numbers that are multiples of 3, that loop prints all the multiples of 3. An alternate way to do the same thing is to replace i++ with i = i + 3 COMP-202 - Programm 31
What will this loop do? int x = 0; while (x < 4) { System.out.println(x); COMP-202 - Programm 32
It goes on forever! The above is what is known as an infinite loop It will go on forever because we never change the value of x, which will always be less than 4 We will keep printing 0 to the screen. This is known as an infinite loop COMP-202 - Programm 33
Tangent: Halting Problem (1) Alan Turing investigated the problem of: Given a computer program in a language like Java, can you detect if there is an infinite loop in it? He proved that you can not write a computer program to test definitively whether any computer program has an infinite loop. You'll know if the program ends, but not if it has an infinite loop COMP-202 - Programm 34
Tangent: Halting Problem (2) This seems like a useless thing to prove, but it has consequences: 1)Philosophically, computers can't solve everything 2)Sometimes, we can take a more useful problem and prove that we can't solve it either, because if we could, then we'd be able to solve the Halting Problem http://en.wikipedia.org/wiki/halting_problem COMP-202 - Programm 35
How many iterations does the following loop consist of? int x = 4; while (x > 4) { System.out.println( I have to write + this over and over. ); x++;
How many iterations does the following loop consist of? int x = 4; while (x > 4) { System.out.println( I have to write + this over and over. ); x++; 0 iterations because x is not > 4 at the beginning
How many iterations does the following loop consist of? int x = 6; while (x > 4) { System.out.println( I have to write + this over and over. ); x--;
How many iterations does the following loop consist of? int x = 6; while (x > 4) { System.out.println( I have to write + this over and over. ); x--; 2 iterations : 1 for x = 6, 1 for x = 5
How many iterations does the following loop consist of? int x = 6; while (x > 4) { System.out.println( I have to write + this over and over. ); x++;
If you add one to the biggest value that can fit into an int, you'll cycle around to the most negative # possible (e.g. negative 2 billion) How many iterations does the following loop consist of? int x = 6; while (x > 4) { System.out.println( I have to write + this over and over. ); x++; It seems infinite. However, be careful to remember that ints have a max value.
How many iterations does the following loop consist of? int x = 3; while (x < 11) { System.out.println( I have to write + this over and over. ); x += 2;
How many iterations does the following loop consist of? int x = 3; while (x < 11) { System.out.println( I have to write + this over and over. ); x += 2; 4 iterations: x=3, x=5, x=7, x=9
Off-By-One Errors It is a common logical error or bug to write loop conditions that result in the loop body being executed one time too few, or one time too many You should always test your code to check that your loops conditions do not cause such errors. COMP-202 - Programm 44
Off-By-One Errors Example //this code is supposed to print all positive //values of x up until 5: What is wrong with it? int x = 1; while (x < 5) { System.out.println(x); x++; COMP-202 - Programm 45
Off-By-One Errors Example The problem is the last iteration is x = 4. We should change the condition to: (x <= 5) OR (x < 6) COMP-202 - Programm 46
Off-By-One Errors Tips To avoid off by one errors, you should always manually confirm the first step of a loop as well as the last step of a loop. Make sure the numbers are what you are expecting. COMP-202 - Programm 47
What will this loop do? int x = 0; while (x < 4) { System.out.println(x); This is an infinite loop that goes on forever! COMP-202 - Programm 48
One command while loops Like if statements, if you put a command following the while loop without a {, it will only include 1 line in your loop. -A very bad thing to do: int x = 0; while (x < 4); { // this is an infinite loop now! x++ COMP-202 - Condition 49
General loop tips Try to think of exactly what it is that you want to do over and over again Figure out the range of values you want to try again and again. Is the loop counter also used in the computation? Make sure that your loop starts or initializes with the right result Make sure that your loop terminates with the correct result COMP-202 - Programm 50
Programming Idioms We would like to build up a list of idioms for programming These are programming structures that initially may be complex and require us to figure out what they mean. However once we've seen them before, we'll learn them and not need to look at them very carefully. COMP-202 - Programm 51
Idiom: Repeating the same thing n times int i = 0; while (i < numdesiredexecutiontimes) { action(s) to perform multiple times i++; The idea is that we will see this so many times we don't need to think about if i should start from 0 or 1, should it be < or <=, etc. COMP-202 - Programm 52
Example: Printing Exams int i = 0; while (i < NUMBER_STUDENTS_IN_CLASS) { printpaper(); i++; Here we are doing the same exact thing NUMBER_STUDENTS_IN_CLASS times COMP-202 - Programm 53
Idiom 2: Doing something for every number in a range int i = 1; while (i <= n) { some statements that depend on i i++; This loop would do something for every value of i from 1 until n (inclusive) COMP-202 - Programm 54
Example: Print every integer from 1 to n int i = 1; while (i <= n) { System.out.println(i); i++; COMP-202 - Programm 55
Exercise: While loop In unit 3, we looked at an example where we wanted to read 10 numbers and convert all of them from Fahrenheit to Celcius. Write a program using a while loop that reads 10 numbers from the keyboard, converts them one at a time to Fahrenheit, and prints the result to the screen. (Answers on next slide: no peaking!) COMP-202 - Programm 56
import java.util.scanner; public class FahrenheitConverter { public static final double NUM_CONVERSIONS = 10; public static void main(string[] args) { int i = 0; Scanner reader = new Scanner(System.in); while (i < NUM_CONVERSIONS) { System.out.println(convertToCelcius(reader.nextInt())); i++; public static double converttocelcius(double fahrenheit){ return (fahrenheit 32.0) * 5.0 / 9.0; COMP-202 - Programmin 57
Exercises: -Write a method that counts the number of factors of a number n (input) and returns the value. -Write a method that takes the sum of all the factors of a number n (input). COMP-202 - Programm 58
Part 2: Class Variables and Constants
Class Constants (final) Very often, you will have a constant that you want to use throughout your entire class in many different methods. -Improves readability -Avoid errors -Easier to maintain Remember that we can declare a constant the same way as a variable, except we add the word final before the type. COMP-202 - Programm 60
Class Constants (final) Sometimes, you'll declare a constant inside a method as normal, but you can also declare a final static constant outside of any method, but inside of a class: public class ConstantExample { public static final int NUM_STATES = 50; public static final int NUM_PROVINCES = 10; public static void main(string[] args) {... COMP-202 - Programm 61
Class Constants (final) Now, throughout you code you won't have mysterious magic numbers like 50 and 10 throughout your code. It's easier to say for sure which 50's refer to the number of states and which 50's refer to something entirely different. Also will be much easier if the constant changes over time for whatever reason. COMP-202 - Programm 62
Scope of variables and constants Remember, that any time you create a variable or constant, it's scope is only within the block of code it was declared in. This means that anywhere inside that block of code, the variable or constant is available and outside the block it is not. COMP-202 - Programm 63
Scope of variables and constants public class CustomerService { public static final String COMPANY_NAME = Videotron ; public static void answercall() { System.out.println( Your call is very important to us. +Please stay on the line and a + COMPANY_NAME + representative will be with your shortly public static void humanpicksup() { System.out.println( You owe + COMPANY_NAME + money for random + surcharges. We hope you'll continue to enjoy our service. ) waitforswearing(); //The identifier COMPANY_NAME is now available throughout your entire class // CustomerService COMP-202 - Programm 64
Scope of class variables public class Scope { public static String companyname = Videotron ;... Variables work the same way. This means that one thing you can do to share a variable between methods is create a variable outside of any method. In this case, you'll still want to write static. This is not generally good practice unless you know what you are doing! COMP-202 - Programm 65
Class Variables These sorts of variables (or constants) are known as class variables (or class constants). They are called this because they belong to the entire class as opposed to one method. COMP-202 - Programm 66
Example of bad use of class variables import java.util.scanner; public class BadFahrenheitConversion { public static double degrees = 0.0; public static Scanner reader = new Scanner(System.in); public static void main(string[] args) { degrees = reader.nextdouble(); converttocelcius(); System.out.println(degrees); public static void converttocelcius() { degrees = (degrees 32.0) * 5.0 / 9.0; COMP-202 - Programm 67
Problems with this: Leads to bugs! 1)The variable degrees is used for different purposes (first it is fahrenheit then it is degrees) Confusing! 2)The method converttocelcius() has a side effect which is unexpected. 3)The code is not reusable. What if you copied this into a different program that already had a variable degrees defined? 4)Because you are doing 2 things with 1 variable, the print statement could be separated from when the value is set. 5)reader can be used by a different method and the main() method wouldn't know. COMP-202 - Programm 68
Better (no class variables) import java.util.scanner; public class BadFahrenheitConversion { public static void main(string[] args) { Scanner reader = new Scanner(System.in); double fahrenheitdegrees = reader.nextdouble(); double celciusdegrees = converttocelcius(fahrenheitdegrees); System.out.println(celciusDegrees); public static double converttocelcius(double degrees) { return (degrees 32.0) * 5.0 / 9.0; COMP-202 - Programm 69
Static constants Static constants do not normally have this problem since their values don't change. There are still cases where it is better to pass a constant to a method rather than use it. We will see later on that there are indeed times to create static variables, but for starters we should not use static variables and should only use static constants with simple types (i.e. int, double, float, boolean, etc. String is OK too despite the capital S) COMP-202 - Programm 70
Part 3: Top Down Programming
Example A prime number is a positive integer >= 2 whose only divisors are 1 and itself. Write a method that calculates whether a number is prime or not using a while loop. The method should take as input an int and return a boolean value of true if the number is prime and false otherwise. COMP-202 - Programm 72
Steps to solve this: First, you should figure out the input and the output of the method. This is normally given in this course, sometimes in words, sometimes in Java terminology With this knowledge, you can write the method header. If this step is not easy, then you need to think about the problem more to understand what it is you are trying to solve! COMP-202 - Programm 73
Steps to solve this: public static boolean isprime(int n) { COMP-202 - Programm 74
Steps to solve this: The next thing to figure out is an algorithm to solve the problem. This is not always easy. In the case of prime numbers, how can we figure out if a number n is prime (if we were doing it by hand)? COMP-202 - Programm 75
Steps to solve this: 1)Check every number from 2 up until n 1. 2)If any of these numbers evenly divide n (i.e. are factors of n), then n is not prime 3)If none of them divide n, then n is prime COMP-202 - Programm 76
Steps to solve this: 1)Check every number from 2 up until n 1. 2)If any of these numbers evenly divide n (i.e. are factors), then n is not prime 3)If none of them divide n, then n is prime The word every strongly implies you'll need some sort of loop. COMP-202 - Programm 77
Steps to solve this: 1)Check every number from 2 up until n 1. 2)If any of these numbers evenly divide n (i.e. are factors), then n is not prime 3)If none of them divide n, then n is prime The if means we'll need some sort of if statement. n not equals prime is our conclusion and in Java will translate to a return statement with the value false COMP-202 - Programm 78
Steps to solve this: 1)Check every number from 2 up until n 1. 2)If any of these numbers evenly divide n (i.e. are factors), then n is not prime 3)If none of them divide n, then n is prime One thing to be very careful of is that none means we have to check ALL of the numbers to make the conclusion. That is, if we see 1 factor, we can conclude it's not prime, but if we see 1 non-factor, we can't conclude it's prime COMP-202 - Programm 79
Now lets analyze each step in detail 1)Check every number from 2 up until n 1. 2)If any of these numbers evenly divide n (i.e. are factors), then n is not prime 3)If none of them divide n, then n is prime We know how to do something for every number. This is idiom #2. We know the code for printing every number from 1 to n. We just have to modify it to go from 2 until n-1 and to do other stuff instead of print! COMP-202 - Programm 80
Steps to solve this: 1)Check every number from 2 up until n 1. 2)If any of these numbers evenly divide n (i.e. are factors), then n is not prime 3)If none of them divide n, then n is prime How can we check if a number x evenly divides n? COMP-202 - Programm 81
Steps to solve this: How can we check if a number x evenly divides n? 1)Use int division. If x / n * n is equal to x, then x must be a multiple of n. Otherwise, we'd have lost information on the division. ex: 6 / 3 * 3 = 6 (6 is a multiple of 3) 5 / 3 * 3 = 3 (since 5 / 3 = 1 in integer division) 2)Use modulo % operator. x % n == 0 if x is a multiple of n. (ex: 48 hours after midnight is 0:00, since 48 is a multiple of 24) COMP-202 - Programm 82
Solution public static boolean isprime(int n) { int x = 2; while (x < n) { if (n % x == 0) { return false; x++; return true; COMP-202 - Programm 83
Even better solution public static boolean isprime(int n) { if (n < 2) { return false; int x = 2; while (x < n) { if (n % x == 0) { return false; x++; return true; COMP-202 - Programm 84
Careful not to make this mistake! public static boolean isprime(int n) { if (n < 2) { return false; int x = 2; while (x < n) { if (n % x == 0) { return false; else { return true; x++; COMP-202 - Programm 85
Careful not to make this mistake! public static boolean isprime(int n) { if (n < 2) { return false; int x = 2; while (x < n) { if (n % x == 0) { return false; else { return true; /* This code returns true if the first number for x (2) isn't a factor of n. For example, 9 is not prime, but 9 % 2!= 0*/ x++; COMP-202 - Programm 86
Asymmetry This asymmetry occurs because a number is prime if none of the numbers preceding it are factors. A number is composite (that is, not prime) if any of the numbers preceding it are factors. none is not the opposite of any so we have an asymmetry in the problem. COMP-202 - Programm 87
Idiom number 3 : All/None vs any The following idiom returns true if any numbers between 1 and max satisfy a condition. False otherwise. (Could modify accordingly to make none instead of all or flip true/false) int i = 1; while (i <= max) { if (some condition) { i++; return false; return true; COMP-202 - Programm 88
Top Down Programming The way we solved this problem is using a technique called topdown programming. We started out with a big goal (determine if a number is prime) Then we looked at the various steps we needed to solve that. (loop through all numbers, check conditions, return statement) We then examined how to solve those various steps (counter + while loop, % operator) COMP-202 - Programm 89
Exercise Now that you have a method isprime, write another method printprimes. Your method should take as input an int n and return void. Your method should then print the first n prime numbers. When you write this method, for practice with taking an exam, try to write it on a piece of paper (or without seeing what the computer does). When you do this, call the method isprime(). But try not to think about how the method isprime() works. Focus only on what it does. COMP-202 - Programm 90
Exercise Write a method that takes as input a String s and returns a boolean representing whether ALL characters are uppercase or not. Note: whenever you have a String, you can access individual characters by writing the name of the String followed by.charat(count) where count is the numberth letter you want. One thing to keep in mind with count is it starts from 0 and ends at the Strings length 1. String foo = hello ; foo.charat(0) ---> letter h foo.charat(4) --> letter o foo.charat(5) --> run time exception since no such character foo.length() ---> gives 5 (one more than the largest index) Hint : If you are having trouble, use top down programming and split your problem into smaller pieces. Start by assuming you have a method isuppercase(char c) COMP-202 - Programm 91
Part 4: The for Statement
Common loop theme Very often in loops, one will do 3 things: 1)Perform some initialization before the loop starts. 2)Check a condition before an iteration of the loop starts. 3)Perform some finalization at the end of each iteration. COMP-202 - Programm 93
Example loop int x = 0; //initialization while (x < 4) //condition { System.out.println(x); x++; //finalization at the end of each step COMP-202 - Programm 94
for loop As this theme was so commonly used, Java added a for loop. A for loop is mostly the same as a while loop, but it adds as part of the for loop syntax an initialization and finalization step. for (initialization; condition; finalization) { //loop body COMP-202 - Programm 95
for loop for (initialization; condition; finalization) { //loop body The initialization step happens once per loop. It happens right before the first step of the for loop COMP-202 - Programm 96
for loop for (initialization; condition; finalization) { //loop body The condition is checked before each iteration of the loop. This is the same as in a while loop. COMP-202 - Programm 97
for loop for (initialization; condition; finalization) { //loop body The finalization happens at the very end of every iteration of the loop. COMP-202 - Programm 98
for loop for (int i = 0; i < 4; i++) { System.out.println(i); This does the same as the while loop prior. It prints the numbers 0,1,2,3 COMP-202 - Programm 99
for loop vs while loop for (int i = 0; i < 4; i++) { System.out.println(i); int i = 0; while (i < 4) { System.out.println(i); i++; COMP-202 - Programm 100
Benefit of for loop for loops are more readable than while loops in some cases. For example, in the previous case, it is obvious when looking at the statement int i = 0; that the statement is part of the loop. In the case of the while loop it isn't as obvious. COMP-202 - Programm 101
Accidental error in while loop int x = 0; while (x < 4) { System.out.println(x); x++; Here it is not quite as obvious that int x = 0; is related to the loop. This means you or someone else could carelessly separate the 2 parts and cause a mistake (for example while copying and pasting) COMP-202 - Programm 102
Benefit of while loop Typically, one chooses a while loop over a for loop if there is an indefinite number of iterations one wants to execute. For example, if you wanted to continue to do something until a certain event occurs. This translates better with a while loop because you don't have a loop counter anyway. COMP-202 - Programm 103
Benefit of while loop int lastleafcupchampionship = 1967; while (lastleafcupchampionship == 1967) { System.out.println( Wow, even the Rangers are better. ); COMP-202 - Programm 104
Infinite loop? int lastleafcupchampionship = 1967; while (lastleafcupchampionship == 1967) { System.out.println( Wow, even the Rangers are better. ); COMP-202 - Programm 105
Treating a for loop like a while loop The statements in a for loop header can be anything including the empty statement: int x = 0; for (; x < 4; ) { System.out.println(x); x++; COMP-202 - Programm 106
COMP-202 - Programm 107
Exercise: Rewrite the isprime() method that we wrote to use a for loop instead of a while loop. Rewrite the printprimes() method as well. COMP-202 - Programm 108
Part 5: Nested Loops
Nested Loops Sometimes, we will put a loop inside of a loop. When this happens...sometimes our brain is tied in a bit of a knot (buda-dum-dum-chi) COMP-202 - Programm 110
Example : Print coordinate table Suppose we want to print all non-negative combinations of x and y in a grid. We can use 1 for loop inside another to do this. COMP-202 - Programm 111
Example : Print coordinate table First, think about y being fixed. For any given y, if I want to print a range of x's, I can do this using a for loop. int y = 1; for (int x = 0; x < 10; x++) { System.out.print( ( + y +, + x + ), ); System.out.print( \n ); COMP-202 - Programm 112
Example : Print coordinate table int y = 1; for (int x = 0; x < 10; x++) { System.out.print( ( + y +, + x + ), ); System.out.print( \n ); We know that this code will loop over x from 0 up until and including 9, and print: (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9) COMP-202 - Programm 113
Example : Print coordinate table Now, I want to do this for every y from 0 to 10 as well. So we need to replace the y = 1 part with a loop that changes the value of y. COMP-202 - Programm 114
Example : Print coordinate table for (int y = 0; y < 10; y++) { for (int x = 0; x < 10; x++) { System.out.print( ( + y +, + x + ), ); System.out.print( \n ); COMP-202 - Programm 115
Using constants for (int y = 0; y < 10; y++) { for (int x = 0; x < 10; x++) { System.out.print( ( + y +, + x + ), ); System.out.print( \n ); It's better to replace the number 10 with a constant describing why we are using the number 10. It may be as simple as NUM_Y_COORDS, but it should be something COMP-202 - Programm 116
Using constants final int VERTICAL_SIZE = 10; //could also be class constants? final int HORIZONTAL_SIZE = 10; for (int y = 0; y < VERTICAL_SIZE; y++) { for (int x = 0; x < HORIZONTAL_SIZE; x++) { System.out.print( ( + y +, + x + ), ); System.out.print( \n ); COMP-202 - Programm 117
Using Methods to Avoid Nested Loops Many times, we can use a method to hide a nested loop. public static void main(string[] args) { for (int y = 0; y < VERTICAL_SIZE; y++) { printrow(y); public static void printrow(int y) { for (int x = 0; x < HORIZONTAL_SIZE; x++) { System.out.print( ( + y +, + x + ), ); System.out.println( \n ); COMP-202 - Programm 118
Avoiding nested loops There still is a nested loop technically in that you are executing a loop inside of a loop. However, the method allows us to hide this aspect. -We look at the printrow() method and can test to make sure it works. -Less chance to get the variables mixed up somehow. (For example to change x when we want to change y) -Miller's law in play (less to keep track of at a time) COMP-202 - Programm 119
Practice with loops -Write a method that takes as input a positive int n and calculates the sum of 1 + 2 +... + n. (Do this using a loop first and then do this using a formula) -Write a method called power that takes as input 2 positive integers base and power and computes base^power. How could you extend this so that the method worked with negatives as well? -Write a method that prints all the powers of two. Do this first using nested loops and then do it using your method power written above. COMP-202 - Programm 120
Exercise: While loop vs for loop Rewrite the above code using: 1)a while loop on the outside and a for loop on the inside 2)a for loop on the outside and a while loop on the inside 3)2 while loops COMP-202 - Programm 121