Nested for Loops More Nested for Loops

Nested for Loops More Nested for Loops

Nested for loops Topic 6 A for loop can contain any kind of statement in its body, Nested for Loops including another for loop. – The inner loop must have a different name for its loop counter "Complexity has and will maintain a strong fascination for many people. It varia ble so tha t it w ill no t con flic t w ith the ou ter loop. is true that we live in a complex world and strive to solve inherently nested loop: Loops placed inside one another, creating a complex problems, which often do require complex mechanisms. loop of loops. However, this s hou ld no t dim in is h our des ire for e legan t so lu tions, w hic h for (int i = 1; i <= 3; i++) { convince by their clarity and effectiveness. Simple, elegant solutions are for (int j = 1; j <= 2; j++) { more effective, but they are harder to find than complex ones, and they System.out.println("six"); require more time , which we too often believe to be unaffordable " } -Niklaus Wirth } Output: six six six six six Based on slides for Building Java Programs by Reges/Stepp, found at six httppyg://faculty.washington.edu/stepp /book/ CS305j Introduction to Computing Nested For Loops 1 CS305j Introduction to Computing Nested For Loops 2 More nested for loops Nested for loop exercise All of the statements in the outer loop' s body are Wha t is the ou tpu t o f the fo llow ing nes te d executed 5 times. for loop? – The inner loop runs 10 times for each of those 5 times, for a total of 50 numbers printed. for (int i = 1; i <= 4; i++) { for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { for (int j = 1; j <= 10; j++) { System.out.pr int ("*"); System.out.print((i * j) + " "); } } System.out.println(); Sys tem.ou t.pr in tln (); // t o end th e } line } Output? Output: 1 2 3 4 5 6 7 8 9 10 Do you really need a nested 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 for loop in this case? 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 CS305j Introduction to Computing Nested For Loops 3 CS305j Introduction to Computing Nested For Loops 4 Nested for loop exercise Nested for loop exercise What is the output of the following nested for Wha t is the ou tpu t o f the fo llow ing nes te d loop? for loop? for (int i = 1; i <= 6; i++) { for (int j = 1; j <= i; j++) { for (int i = 1; i <= 6; i++) { System.out.print("*"); for (int j = 1; j <= i; j++) { } Si(i)System.out.print(i); System.out.println(); } } System.out.println(); } Output: * ** *** Output? **** ***** ****** CS305j Introduction to Computing Nested For Loops 5 CS305j Introduction to Computing Nested For Loops 6 Nested for loop exercise Nested for loop exercise Create a nested for loops produce the A for loop can have more than one loop nested in it. What is the output of the following nested for loops? following output. for (int i = 1; i <= 5; i++) { for (itj(int j = 1; j <= (5 - i)j){i); j++) { System.out.print(" "); ....1 } ...22 for (int k = 1; k <= i; k++) { Sys tem.ou t.pr in t(i); ..333 } .4444 System.out.println(); 55555 } Answer: 1 22 333 4444 55555 CS305j Introduction to Computing Nested For Loops 7 CS305j Introduction to Computing Nested For Loops 8 Common nested loop bugs How to comment: for loops It is a common bug to accidentally type the wrong loop Place a comment on complex loops explaining what they do from a counter variable, which can lead to incorrect behavior. conceptual standpoint, not the mechanics of the syntax. – What is the output of the following nested loops? – Bad: for (int i = 1; i <= 10; i++) { // This loop repeats 10 times, with i from 1 to 10. for (int j = 1; i <= 5; j++) { for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 5; j++) { // loop goes 5 times System.out.print(j); System.out.print(j); // print the j } } System.out.println(); System.out.println(); } } – Better: – WhtiWhat is the ou tpu t o fthf the fo llow ing nes te dld loops ? // Prints 12345 ten times on ten separate lines. for (int i = 1; i <= 10; i++) { for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 5; i++) { for (int j = 1; j <= 5; j++) { System. out. print(j); System.out.print(j); } } System.out.println(); // end the line of output System.out.println(); } } CS305j Introduction to Computing Nested For Loops 9 CS305j Introduction to Computing Nested For Loops 10 Variable scope scope: The portion of a program where a given variable exists. – A variable's scope is from its declaration to the end of the block (pair of {}braces) in which it was declared. • If a variable is declared in a for loop (including the <initialization> or the loop's <statement(s)>, it exists until the Variable Scope end of that for loop. • If a variable is declared in a method, it exists only in that method, until the end of the method. public static void main(String[] args) { int x = 3; for(inti=1;i<=10;i++){for (int i = 1; i <= 10; i++) { System.out.print(x); } // i no longer exists here } // x ceases to exist here CS305j Introduction to Computing Nested For Loops 11 CS305j Introduction to Computing Nested For Loops 12 Scope and using variables Overlapping scope It is a syntax error to try to use a variable outside of its It is syntactically legal to declare variables with the same scope. name, as long as their scopes do not overlap: public static void main(String[] args) { public static void main (String[] ar gs) { intx=2;int x = 2; example(); System.out.println(x); // syntax error for (int i = 1; i <= 5; i++) { int y = 5; System.out.println(y); for (int i = 1; i <= 10; i++) { } int y = 5; for (int i = 3; i <= 5; i++) { System.out.println(y); int y = 2; int x = 4; // illegal } System.out.println(y); System.out.println(y); // syntax error } } } public static void anotherMethod() { public static void example() { int i = 6; int x = 3; int y = 3; System.out.println(x); System.out.println(i + ", " + y); } } CS305j Introduction to Computing Nested For Loops 13 CS305j Introduction to Computing Nested For Loops 14 Problem: redundant values Global constants Often in our programs we will have certain values global (class) constant: A special kind of variable that can (sometimes called magic numbers) that are used throughout the program: be seen throughout the program. – The value of a constant can only be set once. public static void main (String[] ar gs) { printTop(); It can not be changed w hile the program is ru nning. printBottom(); } public static void p rintTop() { Global constant syntax: for (int i = 1; i <= 3; i++) { public static final <type> <name> = <value> ; for (int j = 1; j <= i; j++) { System.out.print(j); } – Constants' names are usually written in ALL_UPPER_CASE. System. out. println(); } } – Examples: public static void printBottom() { public static final int DAYS_IN_WEEK = 7; for (int i = 3;i>3; i >= 1; i--){) { public static final double INTEREST_ RATE = 3. 5; for (int j = i; j >= 1; j--) { System.out.print(3); public static final int SSN = 658234569; } System.out.println(); } } CS305j Introduction to Computing Nested For Loops 15 CS305j Introduction to Computing Nested For Loops 16 Global constant example Another example: figure Makinggg the 3 a global constant removes the redundancy : – the global constant is declared outside methods, but inside the program, Consider the task of drawing the following figure: public class PrintFigure{ +/\/\/\/\/\+ public static final int MAX_VALUE = 3; | | public static void main(String[] args) { +/\/\/\/\/\+ printTop(); printBottom(); } +/\/\/\/\/\+ public static void printTop() { ||| | for (int i = 1; i <= MAX_VALUE; i++) { for (int j = 1; j <= i; j++) { | | System.out.print(j); | | } System.out.println(); | | } ||| | } +/\/\/\/\/\+ public static void printBottom() { for (int i = MAX_VALUE; i >= 1; i--) { for(intj=i;j>=1;jfor (int j = i; j >= 1; j--){) { System.out.print(MAX_VALUE); } Each figure is strongly tied to the number 5 (or a System.out.println(); } multiple such as 10 ...) } } SdfdithfiSee code for drawing these figures. CS305j Introduction to Computing Nested For Loops 17 CS305j Introduction to Computing Nested For Loops 18 Some repetitive code A failed attempt to fix it Note the repetition of numbers based on 5 in the code: A normal variable cannot be used to fix the public static void drawFigure1() { drawPlusLine(); problem, because it is out of scope: drawBarLine(); drawPlusLine(); public static void main (Strin g[] ar gs ) { } int width = 5; public static void drawPlusLine() { drawFigure1(); System.out.print("+"); Output: } for (int i = 1; i <= 5; i++) { System.out.print("/\\"); } +/\/\/\/\/\+ public static void drawFigure1() { System.out.println("+"); drawPlusLine(); } | | +/\/\/\/\/\+ drawBarLine(); public static void drawBarLine() { drawPlusLine(); System.out.print("|"); } for (int i = 1; i <= 10; i++) { System.out.print(" "); } public static void drawPlusLine() { System.out.println("|"); System.out.print("+"); } for (int i = 1; i <= width; i++) { // ERROR – It would be cumbersome to resize the figure such as by changing all System.out.print("/\\"); } the 5s into 8s. System.out.println("+"); } CS305j Introduction to Computing Nested For Loops 19 CS305j Introduction to Computing Nested For Loops 20 Fixing our code with constant A global constant will fix the "magic number" problem: public static final int FIGURE_WIDTH = 5; public static void main(String[] args) { drawFigure1(); } public static void drawFigure1() { drawPlusLine(); Sys tem.ou t.pr in t("|"); for (int i = 1; i <= 2 * FIGURE_WIDTH; i++) { System.out.print(" "); } System.out.println("|"); drawPlusLine(); } CS305j Introduction to Computing Nested For Loops 21.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    6 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us