Lors de la programmation en Java ou dans tout autre langage, vous devrez probablement utiliser les informations d'entrée d'un utilisateur. Java fournit de nombreuses méthodes différentes pour obtenir des informations utilisateur, mais la méthode la plus courante et peut-être la plus simple à implémenter consiste à utiliser l'objet Scanner.
Pas
Méthode 1 sur 2: Vidéos
Étape 1. Importez la classe Scanner
Vous pouvez soit choisir d'importer le
java.util. Scanner
classe ou l'ensemble
java.util
emballer. Pour importer une classe ou un package, ajoutez l'une des lignes suivantes au tout début de votre code:
importer java.util. Scanner; // Cela importera uniquement la classe Scanner. importer java.util.*; // Cela importera l'intégralité du package java.util.
Étape 2. Initialisez un nouvel objet Scanner en passant le
System.in
flux d'entrée au constructeur.
System.in
est le flux d'entrée standard qui est déjà ouvert et prêt à fournir des données d'entrée. Typiquement, ce flux correspond à une entrée au clavier.
Scanner userInputScanner = new Scanner(System.in);
Étape 3. Lisez les différents types de données d'entrée saisies par l'utilisateur
La classe Scanner prend en charge l'obtention de primitives telles que int, byte, short, long en plus d'obtenir des chaînes.
-
Voici quelques méthodes disponibles via la classe Scanner:
-
Lire un octet -
octet suivant()
-
Lire un court -
suivantCourt()
-
Lire un int -
suivantEntier()
-
Lire un long -
suivantLong()
-
Lire un flotteur -
suivantFloat()
-
Lire un double -
suivantDouble()
-
Lire un booléen -
suivantBooléen()
-
Lire une ligne complète -
nextLine()
-
Lire un mot -
Suivant()
-
-
Voici un exemple de programme qui utilise différentes méthodes de la classe Scanner pour obtenir différents types d'entrée:
importer java.util. Scanner; public class ScannerExample { public static void main(String args) { // Lancer un nouveau Scanner Scanner userInputScanner = new Scanner(System.in); // Test de nextLine(); System.out.println("\nQuel est votre nom ? "); Nom de chaîne = userInputScanner.nextLine(); // Test de nextInt(); System.out.print("Combien de chats avez-vous ? "); int numberOfCats = userInputScanner.nextInt(); // Test de nextDouble(); System.out.print("Combien d'argent est dans votre portefeuille ? $"); double moneyInWallet = userInputScanner.nextDouble(); System.out.println("\nBonjour " + nom + " ! Vous avez " + numberOfCats + (numberOfCats > 1 ? " cats": " cat") + " et $" + moneyInWallet + " dans votre portefeuille.\n"); } }
Méthode 2 sur 2: Gestion des exceptions
Étape 1. Gérer les exceptions d'entrée
Un
InputMismatchException
est levée lorsque l'utilisateur entre des données qui ne correspondent pas au type demandé. Par exemple, si l'utilisateur entre une chaîne lorsqu'un int est demandé, le programme lancera un
InputMismatchException
et sortie. Il existe plusieurs façons de gérer cette exception et de résoudre ce problème afin que votre programme soit infaillible.
Étape 2. Utilisez un bloc try-catch pour gérer le
InputMismatchException
.
importer java.util. InputMismatchException; importer java.util. Scanner; public class ScannerExample { public static void main(String args) { // Lancer un nouveau Scanner Scanner userInputScanner = new Scanner(System.in); // Test de nextLine(); System.out.print("\nQuel est votre nom ? "); Nom de chaîne = userInputScanner.nextLine(); // Test de nextInt(); booléen validInput = false; int nombreDeChats = 0; while (!validInput) { System.out.print("Combien de chats avez-vous ? "); essayez { numberOfCats = userInputScanner.nextInt(); entrée valide = vrai; } catch (InputMismatchException e) { validInput = false; userInputScanner.nextLine(); } } // Test de nextDouble(); entrée valide = faux; double moneyInWallet = 0.0; while (!validInput) { System.out.print("Combien d'argent est dans votre portefeuille ? $"); essayez { moneyInWallet = userInputScanner.nextDouble(); userInputScanner.nextLine(); entrée valide = vrai; } catch (InputMismatchException e) { validInput = false; userInputScanner.nextLine(); } } System.out.println("\nBonjour " + nom + "! Vous avez " + numberOfCats + (numberOfCats > 1 ? " cats": "cat") + " et $" + moneyInWallet + " dans votre portefeuille.\ n"); } }
Notez que nous devons importer
java.util. InputMismatchException
afin d'utiliser le
InputMismatchException
Ajouter
userInputScanner.nextLine();
Étape 3. Vous pouvez également rendre la saisie de l'utilisateur infaillible en n'enregistrant que les lignes suivantes du scanner
De cette façon, nous pouvons nous assurer que tout ce que le scanner renvoie est un objet String et ne créera aucune exception. Ensuite, pour convertir les chaînes en entiers ou en doubles, nous pouvons utiliser les classes Integer et Double wrapper.
importer java.util. Scanner; public class ScannerExample { public static void main(String args) { // Lancer un nouveau Scanner Scanner userInputScanner = new Scanner(System.in); // Test de nextLine(); System.out.print("\nQuel est votre nom ? "); Nom de chaîne = userInputScanner.nextLine(); // Test de nextInt(); booléen validInput = false; int nombreDeChats = 0; while (!validInput) { System.out.print("Combien de chats avez-vous ? "); String input = userInputScanner.nextLine(); try { numberOfCats = Integer.parseInt(input); entrée valide = vrai; } catch (NumberFormatException e) { validInput = false; } } // Test de nextDouble(); entrée valide = faux; double moneyInWallet = 0.0; while (!validInput) { System.out.print("Combien d'argent est dans votre portefeuille ? $"); String input = userInputScanner.nextLine(); essayez { moneyInWallet = Double.parseDouble(input); entrée valide = vrai; } catch (NumberFormatException e) { validInput = false; } } System.out.println("\nBonjour " + nom + "! Vous avez " + numberOfCats + (numberOfCats > 1 ? " cats": "cat") + " et $" + moneyInWallet + " dans votre portefeuille.\ n"); } }
Notez qu'ici nous n'avons pas eu à importer le
NumberFormatException
Nous n'avons pas non plus eu à vider le tampon en utilisant
userInputScanner.nextLine();
Des astuces
- Consultez l'API Scanner pour plus d'informations sur l'utilisation de la classe Scanner.
- Utilisez toujours.next() au lieu de.nextLine() pour lire le mot suivant, car.nextLine() peut être bogué.