0% found this document useful (0 votes)
307 views21 pages

Topic 6 Nested For Loops

This document discusses nested for loops in Java. It provides examples of nested for loops and their output. Some key points: - A for loop can contain another for loop in its body, with the inner loop using a different counter variable to avoid conflicts. - Nested loops run the inner loop fully for each iteration of the outer loop, so the number of times the innermost statements execute is the product of the loop counts. - Variables are only in scope within the block they are declared in, so variables from outer loops cannot be accessed in inner loops and vice versa. - Common bugs with nested loops include using the wrong counter variable or trying to access variables outside their scope. - Comments

Uploaded by

thbull02
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
307 views21 pages

Topic 6 Nested For Loops

This document discusses nested for loops in Java. It provides examples of nested for loops and their output. Some key points: - A for loop can contain another for loop in its body, with the inner loop using a different counter variable to avoid conflicts. - Nested loops run the inner loop fully for each iteration of the outer loop, so the number of times the innermost statements execute is the product of the loop counts. - Variables are only in scope within the block they are declared in, so variables from outer loops cannot be accessed in inner loops and vice versa. - Common bugs with nested loops include using the wrong counter variable or trying to access variables outside their scope. - Comments

Uploaded by

thbull02
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

Topic 6

Nested for Loops


"Complexity has and will maintain a strong fascination for many people. It
is true that we live in a complex world and strive to solve inherently
complex problems, which often do require complex mechanisms.
H
However, thi
this should
h ld nott di
diminish
i i h our d
desire
i ffor elegant
l t solutions,
l ti which
hi h
convince by their clarity and effectiveness. Simple, elegant solutions are
more effective, but they are harder to find than complex ones, and they
require more time,
time which we too often believe to be unaffordable "
-Niklaus Wirth

Based on slides for Building Java Programs by Reges/Stepp, found at


http://faculty.washington.edu/stepp/book/
p y g pp

CS305j Introduction to Computing Nested For Loops 1


Nested for loops
8 A for loop can contain any kind of statement in its body,
including another for loop.
– The inner loop must have a different name for its loop counter
variable
i bl so th
thatt it will
ill nott conflict
fli t with
ith th
the outer
t lloop.
8 nested loop: Loops placed inside one another, creating a
loop of loops.
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 2; j++) {
System.out.println("six");
}
}
Output:
six
six
six
six
six
six

CS305j Introduction to Computing Nested For Loops 2


More nested for loops
8All
All of the statements in the outer loop's
loop s body are
executed 5 times.
– The inner loop runs 10 times for each of those 5 times,
for a total of 50 numbers printed.

for (int i = 1; i <= 5; i++) {


for (int j = 1; j <= 10; j++) {
System.out.print((i * j) + " ");
}
S t
System.out.println();
t i tl () // to
t endd the
th
line
}
Output:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
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
Nested for loop exercise
8Whatt iis th
8Wh the output
t t off th
the ffollowing
ll i nested
t d
for loop?
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 5; j++) {
S
System.out.print("*");
i ("*")
}
System.out.println();
}

8Output?
Output?
8Do you really need a nested
for loop in this case?
CS305j Introduction to Computing Nested For Loops 4
Nested for loop exercise
8What is the output of the following nested for
loop?
for (int i = 1; i <= 6; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}

8 Output:
*
**
***
****
*****
******

CS305j Introduction to Computing Nested For Loops 5


Nested for loop exercise
8Whatt iis th
8Wh the output
t t off th
the ffollowing
ll i nested
t d
for loop?
for (int i = 1; i <= 6; i++) {
for (int j = 1; j <= i; j++) {
S
System.out.print(i);
i (i)
}
System.out.println();
}

8Output?
Output?

CS305j Introduction to Computing Nested For Loops 6


Nested for loop exercise
8Create a nested for
f loops produce the
following output.

....1
...22
..333
.4444
55555

CS305j Introduction to Computing Nested For Loops 7


Nested for loop exercise
8 A for loop can have more than one loop nested in itit.
8 What is the output of the following nested for loops?
for (int i = 1; i <= 5; i++) {
f
for (i
(int
t j = 1
1; j <= (5 - i);
i) jj++)
) {
System.out.print(" ");
}
for (int k = 1; k <= i; k++) {
S t
System.out.print(i);
t i t(i)
}
System.out.println();
}
8 Answer:
1
22
333
4444
55555

CS305j Introduction to Computing Nested For Loops 8


Common nested loop bugs
8 It is a common bug to accidentally type the wrong loop
counter variable, which can lead to incorrect behavior.
– What is the output of the following nested loops?
for (int i = 1 1; i < <= 1010; i++) {
for (int j = 1; i <= 5; j++) {
System.out.print(j);
}
System.out.println();
}
– Wh
Whatt iis th
the output
t t off th
the ffollowing
ll i nested
t d loops?
l ?
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 5; i++) {
System out print(j);
System.out.print(j);
}
System.out.println();
}

CS305j Introduction to Computing Nested For Loops 9


How to comment: for loops
8 Place a comment on complex loops explaining what they do from a
conceptual standpoint, not the mechanics of the syntax.
– Bad:
// This loop repeats 10 times
times, with i from 1 to 10
10.
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 5; j++) { // loop goes 5 times
System.out.print(j); // print the j
}
System.out.println();
}
– Better:
// Prints 12345 ten times on ten separate lines.
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 5; j++) {
System.out.print(j);
}
System.out.println(); // end the line of output
}

CS305j Introduction to Computing Nested For Loops 10


Variable Scope

CS305j Introduction to Computing Nested For Loops 11


Variable scope
8scope:
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
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 (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 12
Scope and using variables
8 It is a syntax error to try to use a variable outside of its
scope.
public static void main(String[]
p ( g[] args)
g ) {
example();
System.out.println(x); // syntax error

for (int i = 1; i <


<= 10; i++) {
int y = 5;
System.out.println(y);
}
System.out.println(y); // syntax error
}

public static void example() {


int x = 3;
System.out.println(x);
}

CS305j Introduction to Computing Nested For Loops 13


Overlapping scope
8 It is syntactically legal to declare variables with the same
name, as long as their scopes do not overlap:
public static void main(String[] args) {
int x = 2;
for (int i = 1; i <= 5; i++) {
int y = 5;
System.out.println(y);
}
for (int i = 3; i <= 5; i++) {
int y = 2;
int x = 4; // illegal
System.out.println(y);
}
}
public static void anotherMethod() {
int i = 6
6;
int y = 3;
System.out.println(i + ", " + y);
}

CS305j Introduction to Computing Nested For Loops 14


Problem: redundant values
8 Often in our programs we will have certain values
(sometimes called magic numbers) that are used throughout
the program:
public static void main(String[]
p ( g[] args)
g ) {
printTop();
printBottom();
}
public static void p
p printTop()
p() {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j);
}
System out println();
System.out.println();
}
}
public static void printBottom() {
for (int i = 3; i >=
> 1; i--)
i ) {
for (int j = i; j >= 1; j--) {
System.out.print(3);
}
System.out.println();
}
}
CS305j Introduction to Computing Nested For Loops 15
Global constants
8 global (class) constant: A special kind of variable that can
be seen throughout the program.
– The value of a constant can only be set once.
It can not be changed while
hile the program is rrunning.
nning

8 Global constant syntax:


public static final <type> <name> = <value> ;

– Constants' names are usually written in ALL_UPPER_CASE.

– Examples:
public static final int DAYS_IN_WEEK = 7;
public static final double INTEREST
INTEREST_RATE
RATE = 3
3.5;
5;
public static final int SSN = 658234569;

CS305j Introduction to Computing Nested For Loops 16


Global constant example
8 Making
g the 3 a g
global constant removes the redundancy:
y
– the global constant is declared outside methods, but inside the program,
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 (int j = i; j >= 1; j--) {
System.out.print(MAX_VALUE);
}
System.out.println();
}
}
}
CS305j Introduction to Computing Nested For Loops 17
Another example: figure
8Consider the task of drawing the following figure:
+/\/\/\/\/\+
| |
+/\/\/\/\/\+
+/\/\/\/\/\+
| |
| |
| |
| |
| |
+/\/\/\/\/\+

8Each figure is strongly tied to the number 5 (or a


multiple such as 10 ...)
8S code
8See d ffor drawing
d i ththese fi
figures.
CS305j Introduction to Computing Nested For Loops 18
Some repetitive code
8 Note the repetition of numbers based on 5 in the code:
public static void drawFigure1() {
drawPlusLine();
drawBarLine();
drawPlusLine();
}
public static void drawPlusLine() {
System.out.print("+"); Output:
for (int i = 1; i <= 5; i++) {
System.out.print("/\\");
/\\
} +/\/\/\/\/\+
System.out.println("+");
} | |
+/\/\/\/\/\+
public static void drawBarLine() {
System.out.print("|");
for (int i = 1; i <= 10; i++) {
System.out.print(" ");
}
System.out.println("|");
i
}

– It would be cumbersome to resize the figure such as by changing all


the 5s into 8s
8s.
CS305j Introduction to Computing Nested For Loops 19
A failed attempt to fix it
8A
A normal variable cannot be used to fix the
problem, because it is out of scope:
public static void main(String[]
p ( g[] args)
g ) {
int width = 5;
drawFigure1();
}

public static void drawFigure1() {


drawPlusLine();
drawBarLine();
drawPlusLine();
}

public static void drawPlusLine() {


System.out.print("+");
i
for (int i = 1; i <= width; i++) { // ERROR
System.out.print("/\\");
}
System.out.println("+");
}
CS305j Introduction to Computing Nested For Loops 20
Fixing our code with constant
8 A global constant will fix the "magic
magic number"
number problem:
public static final int FIGURE_WIDTH = 5;

public static void main(String[] args) {


drawFigure1();
}

public static void drawFigure1() {


drawPlusLine();

System.out.print("|");
S t t i 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

You might also like