import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; /** * Ensemble de fonctions pour faciliter la lecture de nombres et de caractères * au clavier. Pour faire usage de cette classe, vous devez soit: * * *

Chaque fonction définie dans cette classe lit une entrée par ligne, * i.e. si la fonction {@link #readInt() Keyboard.readInt()} est * appelée, un entier va être lu dans la dernière ligne tapée au clavier, * et seulement cet entier doit se trouver sur cette ligne ou il y aura une * erreur. Il en va de même pour la lecture d'un nombre réel et d'un * caractère. Seule la lecture d'une chaîne de caractères * ({@link #readString() Keyboard.readString()}) permet la lecture d'une * ligne quelconque. Vous devrez traiter cette ligne manuellement pour * gérer des entrées plus sophistiquées.

* *

Note: Ceci n'est pas un programme. Vous ne pourrez pas l'exécuter * après l'avoir compilé.

* * @author felipe IFT1010, modifié par duranlef, monnier. */ public final class Keyboard { /** Dernière ligne lue. */ private static String derniereEntree; /** Le lecteur de System.in... */ private static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); /** Indique s'il y a eu erreur de la dernière opération. */ private static boolean erreur = false; /** Indique la fin de l'entrée (plus rien à lire). */ private static boolean finEntree = false; /** Constructeur "camouflé". */ Keyboard() {} /** * Lit la prochaine ligne. * @return true si la lecture s'est bien déroulée. */ private static boolean readLine() { try { erreur = false; // jusqu'ici tout est beau. derniereEntree = keyboard.readLine(); if (derniereEntree == null) { // fin de la lecture? finEntree = true; derniereEntree = ""; } return true; } catch (IOException e) { System.err.println("Erreur de lecture clavier"); erreur = true; // il y a eu un problème. } return false; } // ---------------------------------------------------------- // interface de la classe Keyboard. // ---------------------------------------------------------- /** * Retourne vrai s'il y a eu une erreur de lecture lors de la dernière * opération. */ public static boolean error() { return erreur; } /** * Retourne vrai s'il n'y a plus rien à lire. */ public static boolean isEof() { return finEntree; } /** * Lecture d'un entier. * @return L'entier lu s'il y a bel et bien un entier à lire. Sinon, * retourne zéro et le prochain appel à {@link #error() error()} retournera * false. */ public static int readInt() { if (readLine()) { // lecture de la prochaine ligne. try { return Integer.parseInt(derniereEntree); } catch (NumberFormatException e) { // Affiche un message d'erreur pour avertir de l'erreur. //System.err.print("La chaine saisie n'est pas un entier. "); //System.err.println("Je retourne 0 ý la place."); erreur = true; // mauvais format. } } return 0; } /** * Lecture d'un nombre réel. * @return Le nombre lu s'il y a bel et bien un nombre à lire. * Sinon, retourne zéro et le prochain appel à * {@link #error() error()} retournera false. */ public static double readDouble() { if (readLine()) { // lecture de la prochaine ligne. try { return Double.parseDouble(derniereEntree); } catch (NumberFormatException e) { // Affiche un message d'erreur pour avertir de l'erreur. //System.err.println("La chaine saisie n'est pas un nombre dÈcimal"); //System.err.println("Je retourne 0. ý la place"); erreur = true; // mauvais format. } } return 0.0; } /** * Lit un caractère. * @return Le caractère lu s'il y a bel et bien un caractère à lire et s'il * est seul. Sinon, retourne le caractère zéro et le prochain appel à * {@link #error() error()} retournera false. */ public static char readChar() { if (readLine()) // lecture de la prochaine ligne. { if (derniereEntree.length() == 1) { // retourne l'unique caractère de la chaîne. return derniereEntree.charAt(0); } else { //System.err.println("La chaîne saisie n'est pas un caractère unique"); //System.err.println("Je retourne le caractère 0 à la place"); erreur = true; // mauvais format. } } return (char)0; } /** * Lecture d'une chaine de caractères. * @return La chaîne lue s'il n'y a pas eu d'erreur de lecture. Sinon, * retourne chaîne vide et le prochain appel à {@link #error() error()} * retournera false. */ public static String readString() { if (readLine()) // lecture de la prochaine ligne. return derniereEntree; return ""; } } // arch-tag: d58b8289-2355-4c72-b55d-a9d86e4abeb5