Validation du type de données saisie.
Leilu
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
- Excel cette valeur ne correspond pas aux restrictions de validation des données pour cette cellule ✓ - Forum Excel
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"));