comment vérifier le type de données de la validité de la saisie de l'utilisateur (Java Scanner classe)
Je suis en train de faire une INTERFACE utilisateur simple qui demande aux utilisateurs d'entrer des double-tapez les chiffres, si leur entrée n'est pas de type double, le programme devrait garder l'impression de l'invite de commandes jusqu'à ce que les entrées de l'utilisateur valide de type double. Mon code ci-dessous n'est pas tout à fait encore, parce que quand un utilisateur tape dans une valide de type double, le programme ne fait rien, à moins que l'utilisateur tape un autre type double numéro. Je suppose que la condition (sc.hasNextDouble()) dans la boucle while consomme de la première entrée valide. Comment remédier à cela? merci beaucoup
Scanner sc = new Scanner(System.in);
System.out.println("Type a double-type number:");
while (!sc.hasNextDouble())
{
System.out.println("Invalid input\n Type the double-type number:");
sc.next();
}
userInput = sc.nextDouble(); //need to check the data type?
- Ne pas faire
sc.next
.
Vous devez vous connecter pour publier un commentaire.
Puisque vous pouvez pas obtenir un double entré, le meilleur pour lire une Chaîne de caractères, puis de tenter de les convertir en un lit double. Le modèle standard est:
La boucle ne peut pas quitter jusqu'à ce qu'un double a été saisi, après quoi
userInput
tiendra cette valeur.Remarque aussi comment, en mettant l'invite à l'intérieur de la boucle, vous pouvez éviter la duplication de code sur l'entrée non valide.
Votre code fonctionne parfaitement: http://ideone.com/NN42UG et http://ideone.com/MVbjMz
Pour cette entrée:
Donne:
Ce qui est correct, puisque
49,5
n'est pas un nombre décimal car il utilise le mauvais séparateur.La façon dont je le ferais, pour int vs double serait de cycle et vérifier si c'est toujours la même..
Ici est une manière de vérifier si l'entrée est un Int, Double, String, de Caractère ou de
Ce sujet
Double.parseDouble(stringInput);
lorsque vous numérisez l'entrée comme une Chaîne de caractères, vous pouvez ensuite l'analyser pour voir si c'est un double. Mais, si vous enroulez cette méthode statique dans un appel d'une instruction try-catch, alors vous pouvez gérer la situation où un double de la valeur n'est pas analysé.Je pense que la raison de votre code ne fonctionne pas en raison d'abord elle permet de vérifier la donnée d'entrée est de type double ou pas(
sc.hasNextDouble()
) si non alors prenez de nouveau entrée(sc.hasNext()
... pas d'utilisation de cette ligne),puis de nouveau vous prenez d'entrée (userInput = sc.nextDouble()
)Je vous propose de faire comme ceci:
vous avez besoin pour donner à l'entrée si vous êtes à double entrée à la première fois,je pense que si tout le temps de vous donner le double, alors vous devez les fournir à nouveau ,il semble impossible de fournir en entrée une seule fois.