/*
 * Created on 13-Dec-2004 by @author fischer
 *
 * $Log: ZahlenListe.java,v $
 * Revision 1.1  2005/01/04 07:49:05  fischer
 * Musterlösung A10
 *
 * Revision 1.1  2004/12/13 16:00:42  fischer
 * Musterlösungen Blatt 10
 *
 * 
 * $Revision: 1.1 $
 */
package de.unidue.is.prog.woche10;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * @author fischer
 */
public class ZahlenListe {
	
	// die Liste der Zahlen (intern)
	private List dieZahlen=new ArrayList();
		
	public ZahlenListe() {
		// hier passiert nichts mehr, da alle Instanzvariablen schon oben initialisiert sind
	}
	
	// ZahlenListe mit einem Anfangseintrag
	public ZahlenListe(Integer eintrag) {
		this();
		add(eintrag);
	}
	
	// add, remove, getMaximum und getMinimum könnte man außerdem noch einmal für int (statt Integer)
	// implementieren, wenn man es ganz besonders toll machen möchte
	
	public void add(Integer eintrag) {
		dieZahlen.add(eintrag);
	}
	
	public void remove(Integer eintrag) {
		dieZahlen.remove(eintrag);
	}
	
	public Collection getSortedCopy() {
		ArrayList c=new ArrayList(dieZahlen);
		Collections.sort(c);
		return c;
	}
	
	public Integer getMaximum() {
		if (dieZahlen.size()==0) return null;
		else {
			Integer max=(Integer) dieZahlen.get(0);
			for (int i=1; i<dieZahlen.size(); i++)
				if (max.compareTo((Integer) dieZahlen.get(i))<0)
					max=(Integer) dieZahlen.get(i);
			return max;
		}
	}

	public Integer getMinimum() {
		if (dieZahlen.size()==0) return null;
		else {
			Integer min=(Integer) dieZahlen.get(0);
			for (int i=1; i<dieZahlen.size(); i++)
				if (min.compareTo((Integer) dieZahlen.get(i))>0)
					min=(Integer) dieZahlen.get(i);
			return min;
		}
	}
	
	public Double getMean() {
		if (dieZahlen.size()==0) return null;
		else {
			int sum=0;
			for (int i=0; i<dieZahlen.size(); i++)
				sum += ((Integer) dieZahlen.get(i)).intValue();
			return new Double(sum/((double) dieZahlen.size()));
		}		
	}
	
	public int getSize() {
		return dieZahlen.size();
	}
	
	// zum Testen
	public static void main(String[] args) {
		ZahlenListe liste1=new ZahlenListe();
		System.out.println("liste1.getSize(): "+liste1.getSize());
		System.out.println("liste1.getMaximum(): "+liste1.getMaximum());
		System.out.println("liste1.getMinimum(): "+liste1.getMinimum());
		System.out.println("liste1.getMean():    "+liste1.getMean());
		ZahlenListe liste2=new ZahlenListe(new Integer(1));
		liste2.add(new Integer(2));
		liste2.add(new Integer(10));
		liste2.add(new Integer(10));
		System.out.println("liste2.getSize(): "+liste2.getSize());
		System.out.println("liste2.getMaximum(): "+liste2.getMaximum());
		System.out.println("liste2.getMinimum(): "+liste2.getMinimum());
		System.out.println("liste2.getMean():    "+liste2.getMean());
		liste2.remove(new Integer(10));
		System.out.println("liste2.getSize(): "+liste2.getSize());
		System.out.println("liste2.getMaximum(): "+liste2.getMaximum());
		System.out.println("liste2.getMinimum(): "+liste2.getMinimum());
		System.out.println("liste2.getMean():    "+liste2.getMean());
	}

}
