/*******************************************************
   This class implements some basic functions for
   input from the keyboard.
   Written by Maureen Murillo
 *******************************************************/

import java.io.*;
import java.util.*;

public class MlmIn
{

  public static char readChar()
  {
    /******************************************************
       Reads a single character and returns it.
     ******************************************************/

        int current_char=-999;

        try
        {
           current_char = System.in.read();
        }
        catch(IOException e)
        {
           System.out.println(e.getMessage());
           System.out.println("Error reading character.");
           System.exit(0);
        }

        return (char)current_char;
  }

  public static int readInt()
  {
    /******************************************************
       Reads a line of characters and tries to return an
       integer number.
     ******************************************************/

        String num_line;
        int current_int=-9999;
        boolean line_OK = false;

        while (!line_OK)
        {
           num_line = readString().trim();
           try
           {
             current_int = Integer.parseInt(num_line);
             line_OK = true;
           }
           catch (NumberFormatException e)
           {
             System.out.println("Your number is incorrect. Please enter an integer.");
           }
        }

        return  current_int;
  }

  public static float readFloat()
  {
    /******************************************************
       Reads a line of characters and tries to return a
       float number.
     ******************************************************/

        String num_line;
        float current_float=-9999;
        boolean line_OK = false;

        while (!line_OK)
        {
           num_line = readString().trim();
           try
           {
             current_float = Float.parseFloat(num_line);
             line_OK = true;
           }
           catch (NumberFormatException e)
           {
             System.out.println("Your number is incorrect. Please enter a float number.");
           }
        }

        return  current_float;
  }

  public static double readDouble()
  {
    /******************************************************
       Reads a line of characters and tries to return a
       double number.
     ******************************************************/

        String num_line;
        double current_double=-9999;
        boolean line_OK = false;

        while (!line_OK)
        {
           num_line = readString().trim();
           try
           {
             current_double = Double.parseDouble(num_line);
             line_OK = true;
           }
           catch (NumberFormatException e)
           {
             System.out.println("Your number is incorrect. Please enter a double number.");
           }
        }

        return  current_double;
  }

  public static String readString()
  {
    /******************************************************
       Reads a line of characters until it finds a new line
       character and returns a string value.
     ******************************************************/

        String line = "";
        char current_char;
        boolean end_of_line = false;

        while (!end_of_line)
        {
          current_char = readChar();

          if (current_char == '\n')
                end_of_line = true;
          else
            if (current_char != '\r')
                line = line + current_char;
        }

        return line;
  }

}
