import java.io.*;

public class GetData {

  private static int iData;
  private static float fData;
  private static double dData;
  private static long lData;
  private static String strData;
  private static BufferedReader br;
  private static String input;

  public static int getInteger(String msg) {
    while(true) {
      try {
        System.out.print(msg + ": ");
        br = new BufferedReader(new InputStreamReader(System.in));
        input = br.readLine();
        iData = new Integer(input).intValue();
        break;
      } catch (NumberFormatException e) {
        printError(input);
        continue;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return iData;
  }

  public static float getFloat(String msg) {
    while(true) {
      try {
        System.out.print(msg + ": ");
        br = new BufferedReader(new InputStreamReader(System.in));
        input = br.readLine();
        fData = new Float(input).floatValue();
        break;
      } catch (NumberFormatException e) {
        printError(input);
        continue;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return fData;
  }

  public static double getDouble(String msg) {
    while(true) {
      try {
        System.out.print(msg + ": ");
        br = new BufferedReader(new InputStreamReader(System.in));
        input = br.readLine();
        dData = new Double(input).doubleValue();
        break;
      } catch (NumberFormatException e) {
        printError(input);
        continue;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return dData;
  }

  public static long getLong(String msg) {
    while(true) {
      try {
        System.out.print(msg + ": ");
        br = new BufferedReader(new InputStreamReader(System.in));
        input = br.readLine();
        lData = new Long(input).longValue();
        break;
      } catch (NumberFormatException e) {
        printError(input);
        continue;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return lData;
  }

  public static String getString(String msg) {
    while(true) {
      try {
        System.out.print(msg + ": ");
        br = new BufferedReader(new InputStreamReader(System.in));
        input = br.readLine();
        strData = input;
        break;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return strData;
  }

  public static int integerRange(int low, int high, String msg) {
    int value;
    value = getInteger(msg);
    while (value < low || value > high) {
      System.out.println("Error - "+low+" to "+high+" only!");
      System.out.println("Try again.\n");
      value = getInteger(msg);
    }
    return value;
  }

  public static long longRange(long low, long high, String msg) {
    long value;
    value = getLong(msg);
    while (value < low || value > high) {
      System.out.println("Error - "+low+" to "+high+" only!");
      System.out.println("Try again.\n");
      value = getLong(msg);
    }
    return value;
  }

  public static float floatRange(float low, float high, String msg) {
    float value;
    value = getFloat(msg);
    while (value < low || value > high) {
      System.out.println("Error - "+low+" to "+high+" only!");
      System.out.println("Try again.\n");
      value = getFloat(msg);
    }
    return value;
  }

  public static double doubleRange(double low, double high, String msg) {
    double value;
    value = getDouble(msg);
    while (value < low || value > high) {
      System.out.println("Error - "+low+" to "+high+" only!");
      System.out.println("Try again.\n");
      value = getDouble(msg);
    }
    return value;
  }

  private static void printError(String msg) {
    System.out.println(msg + " is not valid.");
  }
}



