i; j--) { System.out.print("."); } for (int k = 1; k <= i; k++) { System.out.print(i); } System.out.println(); } CS305j Introduction to Computing Nested For Loops 7 CS305j Introduction to Computing Nested For Loops 8 "> i; j--) { System.out.print("."); } for (int k = 1; k <= i; k++) { System.out.print(i); } System.out.println(); } CS305j Introduction to Computing Nested For Loops 7 CS305j Introduction to Computing Nested For Loops 8 ">
[go: up one dir, main page]

100% found this document useful (1 vote)
750 views6 pages

Topic6NestedForLoops 4up PDF

Here is a nested for loop that would produce the output: for (int i = 1; i <= 5; i++) { for (int j = 5; j > i; j--) { System.out.print("."); } for (int k = 1; k <= i; k++) { System.out.print(i); } System.out.println(); } CS305j Introduction to Computing Nested For Loops 7 CS305j Introduction to Computing Nested For Loops 8
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
100% found this document useful (1 vote)
750 views6 pages

Topic6NestedForLoops 4up PDF

Here is a nested for loop that would produce the output: for (int i = 1; i <= 5; i++) { for (int j = 5; j > i; j--) { System.out.print("."); } for (int k = 1; k <= i; k++) { System.out.print(i); } System.out.println(); } CS305j Introduction to Computing Nested For Loops 7 CS305j Introduction to Computing Nested For Loops 8
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/ 6

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 variable
i bl so th
thatt it will
ill nott conflict
fli t with
ith th
the outer
t lloop.
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.
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 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,
time which we too often believe to be unaffordable " }
-Niklaus Wirth }
Output:
six
six
six
six
Based on slides for Building Java Programs by Reges/Stepp, found at
six
http://faculty.washington.edu/stepp/book/
p y g pp
six

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
All of the statements in the outer loop's
loop s body are
Whatt iis th

Wh the output
t t off th
the ffollowing
ll i nested
t 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++) { S
System.out.print("*");
i ("*")
System.out.print((i * j) + " "); }
} System.out.println();
S t
System.out.println();
t i tl () // to
t endd the
th }
line
}

Output?
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


Whatt iis th

Wh the output
t t off th
the ffollowing
ll i nested
t 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++) {
} S
System.out.print(i);
i (i)
System.out.println(); }
} System.out.println();
}

Output:
*
**
***
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


f loops produce the
A for loop can have more than one loop nested in itit.

What is the output of the following nested for loops?
following output. for (int i = 1; i <= 5; i++) {
f
for (i
(int
t j = 1
1; j <= (5 - i);
i) jj++)
) {
System.out.print(" ");
....1 }
...22 for (int k = 1; k <= i; k++) {
S t
System.out.print(i);
t i 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 1; i < <= 1010; i++) { // This loop repeats 10 times
times, with i from 1 to 10
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:
Wh
Whatt iis th
the output
t t off th
the ffollowing
ll i nested
t d lloops?
? // 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.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:
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 (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[]
p ( g[] args)
g ) { 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
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 be seen throughout the program.
the program:
The value of a constant can only be set once.
public static void main(String[]
p ( g[] args)
g ) {
printTop(); It can not be changed while
hile the program is rrunning.
nning
printBottom();
}
public static void p
p printTop()
p() {
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();
System.out.println();
}
} Examples:
public static void printBottom() { public static final int DAYS_IN_WEEK = 7;
for (int i = 3; i >=
> 1; i--)
i ) { public static final double INTEREST
INTEREST_RATE
RATE = 3
3.5;
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

Making
g the 3 a g
global constant removes the redundancy:
y
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 (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 ...)
}
}

S code

See d ffor drawing
d i ththese fi
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
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(String[]
p ( g[] args)
g ) {
}
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("|");
i System.out.print("+");
i
} 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
8s. System.out.println("+");
CS305j Introduction to Computing Nested For Loops
}
CS305j Introduction to Computing Nested For Loops
19 20
Fixing our code with constant

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