# Nested Loops

Stephanie Drafts

Greenhorn

Posts: 1

posted 15 years ago

I got this code from Beginning Java 2 JDK 1.2.

public class Factorial {

public static void main(String[] args){

long limit = 20;

long factorial = 1;

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

factorial = 1;

for(int factor = 2; factor <= i; factor++){

factorial *= factor++;

System.out.println(i + " ! " + " is " + factorial );

}

}

}

I get the first part of the "For" loop but when it hits the second "For" loop. I see the loop_condition "factor <= i" never being true. Is the first time through the loop factor = 2 and i = 1. If so, isn't it false. I have changed the relational operation, <=, to different ones to see what would happen. Turns out, only <= works. Help!

------------------

public class Factorial {

public static void main(String[] args){

long limit = 20;

long factorial = 1;

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

factorial = 1;

for(int factor = 2; factor <= i; factor++){

factorial *= factor++;

System.out.println(i + " ! " + " is " + factorial );

}

}

}

I get the first part of the "For" loop but when it hits the second "For" loop. I see the loop_condition "factor <= i" never being true. Is the first time through the loop factor = 2 and i = 1. If so, isn't it false. I have changed the relational operation, <=, to different ones to see what would happen. Turns out, only <= works. Help!

------------------

Tom Ben

Ranch Hand

Posts: 109

posted 15 years ago

This is because the first time thru factor is neither greater than i or less to it so it is false and falls out.You can say something like >= so that factor will always be greater than i.

------------------

Sun Certified Programmer on the Java 2 Platform

Originally posted by Stephanie Drafts:

I got this code from Beginning Java 2 JDK 1.2.

public class Factorial {

public static void main(String[] args){

long limit = 20;

long factorial = 1;

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

factorial = 1;

for(int factor = 2; factor <= i; factor++){

factorial *= factor++;

System.out.println(i + " ! " + " is " + factorial );

}

}

}

I get the first part of the "For" loop but when it hits the second "For" loop. I see the loop_condition "factor <= i" never being true. Is the first time through the loop factor = 2 and i = 1. If so, isn't it false. I have changed the relational operation, <=, to different ones to see what would happen. Turns out, only <= works. Help!

This is because the first time thru factor is neither greater than i or less to it so it is false and falls out.You can say something like >= so that factor will always be greater than i.

------------------

Sun Certified Programmer on the Java 2 Platform

Sun Certified Programmer on the Java 2 Platform

greg philpott

Ranch Hand

Posts: 73

posted 15 years ago

To best solve your problem, it should be completely understood first.

The mathematical way of finding the factorial is:

N ! = Summ (K = 0 to N) of : (N K) * ((-1) ^ K) * (( N - K) ^ N) where (N K) is the binomial coefficient;

Example: 4! = 4*3*2*1 and 5! = 5*4*3*2*1

Now that is known your program can be altered to work out the factorial correctly, like this:

The mathematical way of finding the factorial is:

N ! = Summ (K = 0 to N) of : (N K) * ((-1) ^ K) * (( N - K) ^ N) where (N K) is the binomial coefficient;

Example: 4! = 4*3*2*1 and 5! = 5*4*3*2*1

Now that is known your program can be altered to work out the factorial correctly, like this: