/**
   @version 1.01 2004-02-27
   @author Cay Horstmann
*/

public class StaticInnerClassTest
{  
   public static void main(String[] args)
   {  
      double[] d = new double[20];
      for (int i = 0; i < d.length; i++)
         d[i] = 100 * Math.random();
      ArrayAlg.Pair p = ArrayAlg.minmax(d);
      System.out.println("min = " + p.getFirst());
      System.out.println("max = " + p.getSecond());
   }
}

class ArrayAlg
{  
   /**
      A pair of floating point numbers
   */
   public static class Pair
   { 
      /** 
          Constructs a pair from two floating point numbers
          @param f the first number
          @param s the second number
      */
      public Pair(double f, double s)
      {  
         first = f;
         second = s;
      }

      /**
         Returns the first number of the pair
         @return the first number
      */
      public double getFirst()
      {  
         return first;
      }

      /**
         Returns the second number of the pair
         @return the second number
      */
      public double getSecond()
      {  
         return second;
      }

      private double first;
      private double second;
   }

   /**
      Computes both the minimum and the maximum of an array 
      @param values an array of floating point numbers
      @return a pair whose first element is the minimum and whose
      second element is the maximum
   */
   public static Pair minmax(double[] values)
   {  
      double min = Double.MAX_VALUE;
      double max = Double.MIN_VALUE;
      for (double v : values)
      {  
         if (min > v) min = v;
         if (max < v) max = v;
      }
      return new Pair(min, max);
   }
}
