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!

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

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: