142 lines
3.7 KiB
Java
142 lines
3.7 KiB
Java
|
package util;
|
||
|
|
||
|
import java.io.*;
|
||
|
|
||
|
/** Quelques méthodes pour lire des entiers et des réels.
|
||
|
* @author Xavier Crégut (très largement inspiré par Cay Horstmann)
|
||
|
* @version $Revision: 1.2 $
|
||
|
*/
|
||
|
public class Console
|
||
|
{
|
||
|
/** Afficher un prompt à l'écran (sans passage à la ligne)
|
||
|
* @param prompt texte à afficher à l'écran
|
||
|
*/
|
||
|
public static void printPrompt(String prompt) {
|
||
|
System.out.print(prompt + " ");
|
||
|
System.out.flush(); // forcer l'écriture en l'absence de '\n'
|
||
|
}
|
||
|
|
||
|
/** Lire une chaîne de caractères à partir du clavier. La chaîne de
|
||
|
* caractères est terminée par un retour à la ligne (qui ne fait pas partie
|
||
|
* du résultat). (cf corejava)
|
||
|
*
|
||
|
* @return la ligne lue à partir du clavier (sans le retour à la ligne)
|
||
|
*/
|
||
|
public static String readLine() {
|
||
|
int ch;
|
||
|
String r = "";
|
||
|
boolean done = false;
|
||
|
while (!done) {
|
||
|
try {
|
||
|
ch = System.in.read();
|
||
|
if (ch < 0 || (char) ch == '\n') {
|
||
|
done = true;
|
||
|
} else if ((char) ch != '\r') {
|
||
|
// weird--it used to do \r\n translation
|
||
|
r = r + (char) ch;
|
||
|
}
|
||
|
} catch (java.io.IOException e) {
|
||
|
done = true;
|
||
|
}
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
public static String readString() {
|
||
|
return readLine();
|
||
|
}
|
||
|
|
||
|
/** Même méthode que readLine avec en plus l'affichage d'une invite.
|
||
|
* @param invite texte à afficher à l'écran
|
||
|
* @return la ligne lue à partir du clavier (sans le retour à la ligne)
|
||
|
*/
|
||
|
public static String readLine(String invite) {
|
||
|
printPrompt(invite);
|
||
|
return readLine();
|
||
|
}
|
||
|
|
||
|
/** Lire un caractère après avoir affiché une invite. Tous les caractères
|
||
|
* suivants, jusqu'au retour à la ligne sont considérés consommés.
|
||
|
* @param invite texte à afficher à l'écran
|
||
|
* @return le caractère lu au clavier.
|
||
|
*/
|
||
|
public static char readChar(String invite) {
|
||
|
printPrompt(invite);
|
||
|
String line = readLine();
|
||
|
return line.length() > 0 ? line.charAt(0) : '\n';
|
||
|
}
|
||
|
|
||
|
public static char readChar() {
|
||
|
return readChar("");
|
||
|
}
|
||
|
|
||
|
/** Lire un entier à partir du clavier après avoir affiché une invite.
|
||
|
* Resaisie dans le cas d'une erreur de l'utilisateur.
|
||
|
* @return l'entier lu
|
||
|
*/
|
||
|
public static int readInt(String invite) {
|
||
|
int resultat = 0;
|
||
|
boolean saisieOK = false;
|
||
|
while(! saisieOK) {
|
||
|
printPrompt(invite);
|
||
|
try {
|
||
|
String s = readLine().trim();
|
||
|
resultat = Integer.parseInt(s);
|
||
|
saisieOK = true;
|
||
|
} catch (NumberFormatException e) {
|
||
|
System.out.println ("Ce n'est pas un entier. Recommencez !");
|
||
|
}
|
||
|
}
|
||
|
return resultat;
|
||
|
}
|
||
|
|
||
|
public static int readInt() {
|
||
|
return readInt("");
|
||
|
}
|
||
|
|
||
|
/** Lire un réel à partir du clavier après avoir affiché une invite.
|
||
|
* Resaisie dans le cas d'une erreur de l'utilisateur.
|
||
|
* @return le réel lu
|
||
|
*/
|
||
|
public static double readDouble(String invite) {
|
||
|
double resultat = 0;
|
||
|
boolean saisieOK = false;
|
||
|
while(! saisieOK) {
|
||
|
printPrompt(invite);
|
||
|
try {
|
||
|
String s = readLine().trim();
|
||
|
resultat = Double.parseDouble(s);
|
||
|
saisieOK = true;
|
||
|
} catch (NumberFormatException e) {
|
||
|
System.out.println ("Ce n'est pas un réel. Recommencez !");
|
||
|
}
|
||
|
}
|
||
|
return resultat;
|
||
|
}
|
||
|
|
||
|
public static double readDouble() {
|
||
|
return readDouble("");
|
||
|
}
|
||
|
|
||
|
/** Lire un entier à partir du << flot >> d'entrée après avoir affiché une invite.
|
||
|
* Resaisie dans le cas d'une erreur de l'utilisateur.
|
||
|
* @return l'entier lu
|
||
|
*/
|
||
|
public static int readInt(BufferedReader in, String invite) throws IOException {
|
||
|
int resultat = 0;
|
||
|
boolean saisieOK = false;
|
||
|
while(! saisieOK) {
|
||
|
printPrompt(invite);
|
||
|
try {
|
||
|
String s = in.readLine().trim();
|
||
|
resultat = Integer.parseInt(s);
|
||
|
saisieOK = true;
|
||
|
} catch (NumberFormatException e) {
|
||
|
System.out.println ("Ce n'est pas un entier. Recommencez !");
|
||
|
}
|
||
|
}
|
||
|
return resultat;
|
||
|
}
|
||
|
|
||
|
}
|