FileDocCategorySizeDatePackage
Factorial4.javaAPI DocExample2366Sat Jan 24 10:44:24 GMT 2004je3.basics

Factorial4

public class Factorial4 extends Object
This version of the program uses arbitrary precision integers, so it does not have an upper-bound on the values it can compute. It uses an ArrayList object to cache computed values instead of a fixed-size array. An ArrayList is like an array, but can grow to any size. The factorial() method is declared "synchronized" so that it can be safely used in multi-threaded programs. Look up java.math.BigInteger and java.util.ArrayList while studying this class. Prior to Java 1.2, use Vector instead of ArrayList

Fields Summary
protected static ArrayList
table
Constructors Summary
Methods Summary
public static synchronized java.math.BigIntegerfactorial(int x)
The factorial() method, using BigIntegers cached in a ArrayList

 // create cache
      // Initialize the first element of the cache with !0 = 1.
	table.add(BigInteger.valueOf(1));
    
        if (x<0) throw new IllegalArgumentException("x must be non-negative.");
        for(int size = table.size(); size <= x; size++) {
            BigInteger lastfact = (BigInteger)table.get(size-1);
            BigInteger nextfact = lastfact.multiply(BigInteger.valueOf(size));
            table.add(nextfact);
        }
        return (BigInteger) table.get(x);
    
public static voidmain(java.lang.String[] args)
A simple main() method that we can use as a standalone test program for our factorial() method.

        for(int i = 0; i <= 50; i++)
	    System.out.println(i + "! = " + factorial(i));