/**
  *
  * Programmieraufgabe P-19 (MedianTest.java)
  *
  * @author Leonhard Fellermayr
  * @version 1.0
  *
  */

/** Benoetigte Packages: der Comparator sowie der Zufallszahlengenerator */

import java.util.Comparator;
import java.util.Random;

/** Implementierung der Klasse MedianTest. */

public class MedianTest
{

    /** @param BSP_ARR_LAENGE Die Laenge des Beispiel-Arrays
      * @param BSP_ARR_MAXVAL Hoechster Integer-Wert im Beispiel-Array
      * @param gen Instanz des Random-Generators
      **/

    private static final int BSP_ARR_LAENGE = 10;
    private static final int BSP_ARR_MAXVAL = 150;

    private static Random gen = new Random ();

    /******************************************************************************************
      * main (String[]) : main-Methode der Klasse.
      *
      * @param args Dieses Programm wertet keine Kommandozeilenparameter aus
      * @return void
      *
      **/

    public static void main (String[] args)
    {

	/** Integer-Vergleich - implementiert abstrakte Klasse Comparator */

	class IntCompare implements Comparator
	{
	    public int compare (Object o1, Object o2)
	    {
		return ((Integer)o1).intValue() - ((Integer)o2).intValue();
	    }
	}

	/** Unser Beispiel-Array mit der gewuenschten Laenge */

	Object[] bsp = new Object[BSP_ARR_LAENGE];

	/** Instantiiere obigen Integer-Comparator */

	IntCompare c = new IntCompare ();

	/** Instantiiere ein Objekt der Klasse Median */

	Median myMedian = new Median ();

	/** Fuelle unser Array mit zufaelligen Werten aus [0..BSP_ARR_MAXVAL] */

	for (int i = 0; i < bsp.length; i++)
		bsp[i] = new Integer (gen.nextInt (BSP_ARR_MAXVAL + 1));

	/** Konsolenausgabe des urspruenglichen Arrays und des Medians */

	System.out.println ("Array  : " + arrayToStr (bsp));
	System.out.println ("Median : " + myMedian.median (bsp, c));

    } // main ()

   /******************************************************************************************
      * arrayToStr (Object[]) : Gibt die Elemente eines Arrays als langen String zurueck.
      * Die Elemente werden dabei mit Komma getrennt.
      *
      * @param o Das Eingabearray, dessen Elemente im String landen
      * @return Der konvertierte String
      *
      **/

    private static String arrayToStr (Object[] o)
    {

	/** @param ret Rueckgabewert (String) */
	String ret = "";

	for (int k = 0; k < o.length; k++)
	{
		ret += o[k];
		if (k < o.length - 1) ret += ",";
	}

	return ret;

    } // arrayToStr ()

} // Klasse MedianTest