Validation du type de données saisie.
Leilu
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je suis débutante avec java, j'apprend à programmer et je suis butter devant un problème.
voici une partie de mon code qui sert à calculer des primes d'assurance.
Lorsque par exemple on entre des chiffres lorsqu'on demande le sexe, le programme plante. J'aimerais qu'il ne fasse que continuer à demander la question. La boucle do....while que j'ai fait exécute le même travail si on entre autre chose que "h" ou "f". Est-ce qu'il est possible d'ajouter une condition pour m'assurer que le type est respecté.
Merci.
Je suis débutante avec java, j'apprend à programmer et je suis butter devant un problème.
voici une partie de mon code qui sert à calculer des primes d'assurance.
Scanner demandeInformation = new Scanner(System.in); do { System.out.println("Quel est votre sexe ? (h/f) "); client.sexe = demandeInformation.next(); } while ((!Objects.equals(client.sexe, "h")) && (!Objects.equals(client.sexe, "f"))); // boucle de condition pour s'assurer que la données entrées est == à "h" ou == à "f" do { System.out.println("Quel est votre âge ? "); client.age = demandeInformation.nextInt(); } while ((client.age <= 0) || (client.age > 110)); // boucle de condition pour s'assurer que la valeur de client.age est inférieur à 110 ans et supérieur à zéro. do { System.out.println("Quelle est la valeur d'achat de votre véhicule ? "); client.valeurAchat = demandeInformation.nextDouble(); } while (client.valeurAchat <= 0); // Boucle de condition pour s'assurer que la valeur de client.valeurAchat est supérieur à Zéro. do { System.out.println("Quell est l'année de fabrication de votre véhicule ? "); client.anneeFabrication = demandeInformation.nextInt(); } while ((client.anneeFabrication <= 0) || (client.anneeFabrication > client.anneeEnCours)); // Boucle de condition pour s'assurer que l'année de fabrication est supérieur à Zéro et inférieur à l'année en cours. do { System.out.println("Avex-vous fait des réclamation au cours des 6 dernières anées ? (oui/non) "); client.reclamationPrecedantes = demandeInformation.next(); } while ((!Objects.equals(client.reclamationPrecedantes, "oui")) && (!Objects.equals(client.reclamationPrecedantes, "non")));
Lorsque par exemple on entre des chiffres lorsqu'on demande le sexe, le programme plante. J'aimerais qu'il ne fasse que continuer à demander la question. La boucle do....while que j'ai fait exécute le même travail si on entre autre chose que "h" ou "f". Est-ce qu'il est possible d'ajouter une condition pour m'assurer que le type est respecté.
Merci.
A voir également:
- Validation du type de données saisie.
- Fuite données maif - Guide
- Ethernet n'a pas de configuration ip valide - Guide
- Saisie gestuelle iphone - Guide
- Excel validation des données liste - Guide
- Supprimer les données de navigation - Guide
1 réponse
Bonjour,
En Java 8 il est très facile de faire ce genre de tests avec une petite méthode utilitaire, exemple :
En Java 8 il est très facile de faire ce genre de tests avec une petite méthode utilitaire, exemple :
// import java.util.function.*; public static <E> E getAndCheck(String msg, Supplier<E> getter, Function<E, Boolean> condition) { E result = null; do { System.out.println(msg); try { result = getter.get(); } catch (RuntimeException e) { } } while (result == null || !condition.apply(result)); return result; }
// import java.util.Scanner; Scanner sc = new Scanner(System.in); client.sexe = getAndCheck( "Quel est votre sexe ? (h/f)", sc::nextLine, r -> r.equals("h") || r.equals("f")); client.age = getAndCheck( "Quel est votre âge ?", () -> Integer.parseInt(sc.nextLine()), r -> r > 0 && r <= 110); client.valeurAchat = getAndCheck( "Quelle est la valeur d'achat de votre véhicule ?", () -> Double.parseDouble(sc.nextLine()), r -> r > 0); client.anneeFabrication = getAndCheck( "Quelle est l'année de fabrication de votre véhicule ?", () -> Integer.parseInt(sc.nextLine()), r -> r > 0 && r <= client.anneeEnCours); client.reclamationsPrecedentes = getAndCheck( "Avez-vous fait des réclamations au cours des 6 dernières années ? (oui/non)", sc::nextLine, r -> r.equals("oui") || r.equals("non"));