Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!

# Nested Loops

Stephanie Drafts
Greenhorn
Posts: 1
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!

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

Tom Ben
Ranch Hand
Posts: 109
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

greg philpott
Ranch Hand
Posts: 73
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: