FileDocCategorySizeDatePackage
Factorial3.javaAPI DocExample1218Sat Jun 02 02:41:06 BST 2001None

Factorial3.java

// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples

/**
 * This class computes factorials and caches the results in a table for reuse.
 * 20! is as high as we can go using the long data type, so check the argument
 * passed and "throw an exception" if it is too big or too small.
 **/
public class Factorial3 {
  // Create an array to cache values 0! through 20!.
  static long[] table = new long[21];
  // A "static initializer": initialize the first value in the array
  static { table[0] = 1; }  // factorial of 0 is 1.
  // Remember the highest initialized value in the array
  static int last = 0;

  public static long factorial(int x) throws IllegalArgumentException {
    // Check if x is too big or too small.  Throw an exception if so.
    if (x >= table.length)   // ".length" returns length of any array
      throw new IllegalArgumentException("Overflow; x is too large.");
    if (x