TP-programmation-orientee-o.../TP10/util/Console.java

142 lines
3.7 KiB
Java
Raw Normal View History

2023-06-20 19:02:09 +00:00
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;
}
}