import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class OOUtil {
  private final float version = 1.1f;
  public String toString() { return "OOUtil v" + version; }

  public int readInt(){
    return readInt("Bitte geben Sie eine ganze Zahl ein: ");
  }

  public int readInt(String msg){
    try {
      if (msg != null) System.out.print(msg);
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
      String number = input.readLine();
      return Integer.parseInt(number);
    } catch (NumberFormatException e) {
        return readInt(msg);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
  }

  public float readFloat() {
    return readFloat("Bitte geben Sie eine Fliesskommazahl ein: ");
  }

  public float readFloat(String msg) {
    try {
      if (msg != null) System.out.print(msg);
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
      String number = input.readLine();
      return Float.parseFloat(number);
    } catch (NumberFormatException e) {
        return readFloat(msg);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
  }

  public double readDouble() {
    return readDouble("Bitte geben Sie eine Fliesskommazahl ein: ");
  }

  public double readDouble(String msg) {
    try {
      if (msg != null) System.out.print(msg);
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
      String number = input.readLine();
      return Double.parseDouble(number);
    } catch (NumberFormatException e) {
        return readDouble(msg);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0.0;
  }

  public String readString() {
    return readString("Bitte geben Sie einen String ein: ");
  }

  public String readString(String msg) {
    try {
      if (msg != null) System.out.print(msg);
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
      return input.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "";
  }

  public char readChar() {
    return readChar("Bitte geben Sie einen Character ein: ");
  }

  public char readChar(String msg) {
    if (msg != null) System.out.print(msg);
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    try {
      char c = (char)input.read();
      if(c!='\n' && c!='\r' && c!='\t') return c;
      else return readChar(msg);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 'a';
  }

  public int getGgT(int a, int b) {
    if (a < 0) a = Math.abs(a); // a = a * -1;
    if (b < 0) b = Math.abs(b);
    while (b != 0) {
      int h = b;
      b = a % b;
      a = h;
    }
    return a;
  }
}
