import java.io.*;
/**
/ Klasse mit eigenen Hilfsfunktionen von mr037<br>
* z.B. zur vereinfachten Tastatureingabe
*
* @author mr037
*/
public final class Mylib{
	static final LineNumberReader in = new LineNumberReader (new InputStreamReader (System.in));
	
   /**
    * Zahl von der Tatstatur einlesen
    *
    * @param   text  Text mit dem zur Eingabe aufgefordert wird
    * @return        eingelesene Zahl
    */
	
	public static double zahlLesen(String text){
		while(true){
			System.out.print(text+": ");
			try{return Double.parseDouble(in.readLine());}
			catch (IOException e) {FehlerUndSchluss("IO",e);}
			catch (NumberFormatException e) {System.out.println("Bitte eine Zahl eingeben!");}
		}
	}
	
   /**
    * Zahl von der Tatstatur einlesen und sicherstellen, daß sie zwischen min und max liegt.
    *
    * @param  text  Text mit dem zur Eingabe aufgefordert wird
    * @param  min   kleinster erlaubter Wert
    * @param  max   größter erlaubter Wert
    * @return       eingelesene Zahl
    */
 	public static double zahlLesen(String text, double min, double max){
		double zahl=0.0;
		while(true){
			if((zahl=zahlLesen(text+" ("+min+" ... "+max+")"))>=min && zahl<=max) return zahl;
			else System.out.println("Bitte eine Zahl zwischen "+min+" und "+max+" eingeben!");
		}
	}
	
   /**
    * Programm aufgrund eines schweren Fehlers abbrechen.
    * @param  Fehlerart  Art des Fehlers (z.B. IO)
    * @param  e          Exception, die den Fehler hervorgerufen hat.
    */
     	static void FehlerUndSchluss(String Fehlerart, Exception e){
			System.out.println("************************************");
			System.out.println(Fehlerart + " Fehler: " + e.getMessage());
			System.out.println("************************************");
			e.printStackTrace();
			System.exit(1); // Programm beenden
	}


   /**
    * ganze Zahl von der Tatstatur einlesen
    *
    * @param   text  Text mit dem zur Eingabe aufgefordert wird
    * @return        eingelesene ganzeZahl
    */
	
	public static int ganzeZahlLesen(String text){
		while(true){
			System.out.print(text+": ");
			try{return Integer.parseInt(in.readLine());}
			catch (IOException e) {FehlerUndSchluss("IO",e);}
			catch (NumberFormatException e) {System.out.println("Bitte eine Zahl eingeben!");}
		}
	}
	
	/**
    * ganze Zahl von der Tatstatur einlesen und sicherstellen, daß sie zwischen min und max liegt.
    *
    * @param  text  Text mit dem zur Eingabe aufgefordert wird
    * @param  min   kleinster erlaubter Wert
    * @param  max   größter erlaubter Wert
    * @return       eingelesene ganze Zahl
    */
 	public static int ganzeZahlLesen(String text, int min, int max){
		int zahl=0;
		while(true){
			if((zahl=ganzeZahlLesen(text+" ("+min+" ... "+max+")"))>=min && zahl<=max) return zahl;
			else System.out.println("Bitte eine Zahl zwischen "+min+" und "+max+" eingeben!");
		}
	}
	
	/**
	* Ja-Nein Frage stellen und Antwort von der Tastatur einlesen
	* @param   text Frage
	* @return      Antwort
	*/
	public static boolean jaNein(String text){
		String Antwort = "";
		while(true){
			System.out.print(text+": ");
			try{
				Antwort = in.readLine().trim().toUpperCase();
				if(Antwort.equals("JA")   ||Antwort.equals("J")) return true;
				if(Antwort.equals("NEIN") ||Antwort.equals("N")) return false;
				System.out.println("Bitte mit ja oder nein Antworten!");
			}
			catch (IOException e) {FehlerUndSchluss("IO",e);}
		}
	}
	
	/**
	* in gegebenen int Array Zahlen einlesen
	* @param   text       text mit dem zur Eingabe aufgefordert wird 
	* @param   intArray   Das Array welches mit Zahlen gefuellt werden soll 
	*/
	
	public static void intArrayLesen (String text, int[] ary){
	if (ary.length==0) System.out.println("Fehler! Array ist 0");
	else{
		System.out.println(text);
		System.out.println("Bitte geben Sie jetzt "+ary.length+" Zahlen ein");
		for (int z=0;z<ary.length;z++){
			ary[z]=ganzeZahlLesen("Bitte "+(z+1)+". Zahl eingeben");
		}
		return;
		}
	}
	
	/**
	* Mittelwert von int Array berechnen 
	* @param   intArray 	Array mit Zahlen deren Mittelwert errechnet werden soll
	*/
	
	public static double mittelwert (int[]ary){
		double summe=0;
		for (int i=0;i<ary.length;i++){
			summe=summe+(double)(ary[i]);
		}
		return summe/ary.length;
		}
		
	/**
	* Mittelwert von double Array berechnen 
	* @param   doubleArray 	Array mit Zahlen deren Mittelwert errechnet werden soll
	*/
	
	public static double mittelwert (double[]ary){
		double summe=0;
		for (int i=0;i<ary.length;i++){
			summe=summe+ary[i];
		}
		return summe/ary.length;
		}
	
	/**
	* Text einlesen
	* @param    text 	Text mit dem zur Eingabe aufgefordert wird
	*/
	
	public static String textLesen(String meldung){
		System.out.print(meldung+": ");
		String Zeile=null;
		try{
			Zeile=in.readLine().trim();
		}catch (IOException e) {FehlerUndSchluss("IO",e);}
		return Zeile;
	}
	
	/**
	* Zeichenkette mit Character vergleichen
	* @param    z 	Character mit dem verglichen wird
	* @param    kette 	Text auf den verglichen wird
	*/
	
	public static int wieOft(char z, String kette){
		int ergebnis=0;
		int laenge=kette.length();
		for (int i=0;i<laenge;i++){
			if (z==kette.charAt(i)) ergebnis++;
			}
		return ergebnis;			
	}

}
