/**
  Keep track of a sequence of elapsed timings.
 */

import java.util.Vector;


public class 
EpisodeTimer {


  /**
     @return The average of all complete collected episode lengths.
   */

  public double 
  average() { 

    long total = 0

    for (long t: times)
      total += t

    return ((double) total)/times.size()
    }


  /**
     Create an episode timer.
   */

  public
  EpisodeTimer() {
    times = new Vector<Long>()
    }


  /**
     Start timing.
   */

  public void 
  start() { 
    times.add(System.currentTimeMillis())
    }


  /**
     @return The standard deviation of all complete collected episode lengths.
   */

  public double 
  stddev() { 

    long 
      sum = 0,
      sumSqr = 0

    for (long t: times) {
      sum += t
      sumSqr += t*t
      }

    final int n = times.size()

    return Math.sqrt((sumSqr - ((double) (sum*sum)/n))/(n - 1))
    }


  /**
     Stop timing.
   */

  public void 
  stop() { 

    final int n = times.size() - 1

    times.set(n, System.currentTimeMillis() - times.get(n))
    }


  /**
     The collected episode lengths.
   */

  private Vector<Long> times
  }


syntax highlighted by Code2HTML, v. 0.9.1