import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * Einfache Klasse, die Konsoleneingaben entgegennimmt.
 * Benoetigt JDK1.2 oder hoeher.
 *
 * @@author AG Betriebssysteme
 * @@version $Revision: 1.1 $
 */
public  abstract class Input {

        private static BufferedReader m_reader;

        static {
                try {
                        m_reader = new BufferedReader(new InputStreamReader(System.in));
                } catch (Throwable e) {
                        System.out.println("Warnung: Konsoleneingabe nicht moeglich.");
                }
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;long&lt;/code&gt;-Wert.

         *
         * @@return Der eingegebene &lt;code&gt;long&lt;/code&gt;-Wert.
         */
        public static long readLong() {
                try {
                        return Long.parseLong(readln());
                } catch (Throwable e) {
                        return 0L;
                }
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;double&lt;/code&gt;-Wer
t.
         *
         * @@return Der eingegebene &lt;code&gt;double&lt;/code&gt;-Wert.
         */
        public static double readDouble() {
                try {
                        return Double.parseDouble(readln());
                } catch (Throwable e) {
                        return 0d;
                }
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;float&lt;/code&gt;-Wert
.
         *
         * @@return Der eingegebene &lt;code&gt;float&lt;/code&gt;-Wert.
         */
        public static float readFloat() {
                try {
                        return Float.parseFloat(readln());
                } catch (Throwable e) {
                        return 0f;
                }
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;int&lt;/code&gt;-Wert.
         *
         * @@return Der eingegebene &lt;code&gt;int&lt;/code&gt;-Wert.
         */
        public static int readInt() {
                try {
                        return Integer.parseInt(readln());
                } catch (Throwable e) {
                        return 0;
                }
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;char&lt;/code&gt;-Wert.
 Es wird nur
         * das erste Zeichen beruecksichtigt.
         *
         * @@return Der eingegebene &lt;code&gt;char&lt;/code&gt;-Wert.
         */
        public static char readChar() {
                try {
                        return readln().charAt(0);
                } catch (Throwable e) {
                        return (char) 0;
                }
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;boolean&lt;/code&gt;-We
rt.
         * Folgende Eingaben werden als &lt;code&gt;true&lt;/code&gt; interpreti
ert:
         * &lt;ul&gt;
         * &lt;li&gt;&lt;code&gt;1&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;y&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;t&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;j&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;w&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;yes&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;true&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;ja&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;wahr&lt;/code&gt;
         * &lt;li&gt;&lt;code&gt;ok&lt;/code&gt;
         * &lt;/ul&gt;
         * Gross- und Kleinschreibung wird nicht unterschieden.
         * Alle anderen Eingaben werden als &lt;code&gt;false&lt;/code&gt; inter
pretiert.
         *
         * @@return Der eingegebene &lt;code&gt;boolean&lt;/code&gt;-Wert.
         */
        public static boolean readBoolean() {
                try {
                        final String[] trueValues =
                                        {"1", "y", "t", "j", "w", "yes", "true",
 "ja", "wahr", "ok"};
                        String input = readln().toLowerCase();
                        for (int index = 0;     index < trueValues.length; ++index) {
                                if (trueValues[index].equals(input)) {
                                        return true;
                                }
                        }
                } catch (Throwable e) {
                }
                return false;
        }

        /**
         * Wartet auf Tastatureingaben, von einem Zeilenumbruch abgeschlossen
         * und interpretiert die Eingabe als &lt;code&gt;String&lt;/code&gt;.
         *
         * @@return Die eingegebene Zeichenkette.
         */
        public static String readString() {
                try {
                        return readln();
                } catch (Throwable e) {
                        return "";
                }
        }

        private static String readln() {
                try {
                        return m_reader.readLine();
                } catch (Throwable e) {
                        return "";
                }
        }
}
