🔸5🔸stdin¶
Lecture depuis le stdin¶
Utilisation de Scanner
import java.util.Scanner;
public class LectureConsole {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Lecture simple
System.out.print("Entrez votre nom: ");
String nom = scanner.nextLine();
// Lecture avec validation
int age = 0;
boolean saisieValide = false;
while (!saisieValide) {
try {
System.out.print("Entrez votre âge: ");
age = Integer.parseInt(scanner.nextLine());
saisieValide = true;
} catch (NumberFormatException e) {
System.out.println("Erreur: Veuillez entrer un nombre valide");
}
}
System.out.printf("Bonjour %s, vous avez %d ans%n", nom, age);
}
}
Gestion des exceptions courantes¶
import java.util.Scanner;
import java.util.InputMismatchException;
public class GestionExceptions {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Lecture d'un nombre avec gestion complète des erreurs
double nombre = 0;
boolean lectureOK = false;
while (!lectureOK) {
try {
System.out.print("Entrez un nombre décimal: ");
nombre = scanner.nextDouble();
lectureOK = true;
} catch (InputMismatchException e) {
System.out.println("Erreur: Format invalide");
scanner.nextLine(); // Vider le buffer
}
}
System.out.printf("Nombre saisi: %.2f%n", nombre);
}
}
Exemple pratique complet¶
import java.util.Scanner;
public class CalculatriceInteractive {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
try {
// Lecture du premier nombre
System.out.print("Premier nombre (ou 'q' pour quitter): ");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("q")) {
break;
}
double nombre1 = Double.parseDouble(input);
// Lecture de l'opération
System.out.print("Opération (+, -, *, /): ");
String operation = scanner.nextLine();
// Lecture du deuxième nombre
System.out.print("Deuxième nombre: ");
double nombre2 = Double.parseDouble(scanner.nextLine());
// Calcul et affichage du résultat
double resultat = switch (operation) {
case "+" -> nombre1 + nombre2;
case "-" -> nombre1 - nombre2;
case "*" -> nombre1 * nombre2;
case "/" -> {
if (nombre2 == 0) {
throw new ArithmeticException("Division par zéro");
}
yield nombre1 / nombre2;
}
default -> throw new IllegalArgumentException("Opération non valide");
};
System.out.printf("Résultat: %.2f%n", resultat);
} catch (NumberFormatException e) {
System.out.println("Erreur: Veuillez entrer un nombre valide");
} catch (ArithmeticException e) {
System.out.println("Erreur: Division par zéro impossible");
} catch (IllegalArgumentException e) {
System.out.println("Erreur: " + e.getMessage());
}
System.out.println(); // Ligne vide pour la lisibilité
}
System.out.println("Au revoir!");
scanner.close();
}
}
Points importants à retenir¶
Types d’exceptions courantes :
NumberFormatException
: Conversion de chaîne en nombre échouéeInputMismatchException
: Type de donnée incorrect lors de la lectureNoSuchElementException
: Plus de données à lireIllegalArgumentException
: Argument invalide
Bonnes pratiques :
- Toujours vider le buffer après une erreur de lecture
- Fermer le
Scanner
à la fin du programme - Utiliser des boucles pour permettre plusieurs tentatives de saisie
- Préférer
scanner.nextLine()
suivi de conversion plutôt que les méthodes spécifiques commenextInt()
Structure try-catch recommandée :
try{
// Code pouvant générer une exception
} catch(Exception1 e) {
// Gestion de l'exception 1
} catch(Exception2 e) {
// Gestion de l'exception 2
} finally {
// Code exécuté dans tous les cas
}
Note
Page rédigée en partie avec l’aide d’un assistant IA, principalement à l’aide de Perplexity AI, avec le LLM Claude 3.5 Sonnet. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.