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:
What are you doing? You are supposed to be reading this tiny ad!
the new thread boost feature brings a LOT of attention to your favorite threads
https://coderanch.com/t/674455/ThreadBoostfeature
