cs_Stoufy1605
Messages postés61Date d'inscriptionvendredi 7 janvier 2011StatutMembreDernière intervention17 avril 2013
-
29 févr. 2012 à 00:07
cs_Stoufy1605
Messages postés61Date d'inscriptionvendredi 7 janvier 2011StatutMembreDernière intervention17 avril 2013
-
19 mars 2012 à 16:53
Bonjour à la communauté codes-source! Je souhaite vous poser un petit problème de débutant:
J'essaye pour le moment de faire un TP proposé par un tutoriel pour apprendre java, il s'agit du classique programme de conversion Celcius-Farenheit. Seulement voilà, en voulant bien faire j'ai voulu essayer de rajouter une petit ligne à mon exercice (car tel qu'il est en solution, il bug), je voulais que lorsque l'utilisateur entre autre chose qu'un chiffre, le logiciel ne bug pas mais répète la question. Hors d'ou vient ma réflexion, comment différencié une lettre d'un chiffre, ou alors contourner le probleme. Vous l'aurez compris mon logiciel n'est pas terminé, mais je souhaites régler ce problème avant de passer à un autre. Merci à tout le monde.
import java.util.Scanner;
public class conversionFarenheitCelcius {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
{
//création des variables
double Celcius =0;
double Farenheit=0;
double Formule=0;
double Intervalle=0;
double TemperatureFinale=0;
double a=0;
// pose la question de bienvenue à l'utilisateur + enregistre son prénom
System.out.println("Bonjour," + prenom+ ", ceci est un programme de convertion Celcius-Farenheit, Veuillez entrer un nombre de départ SVP");
Scanner sc1 = new Scanner (System.in);
Celcius = sc1.nextDouble();
while (Celcius= ){
}
System.out.println("Entrez l'intervalle que vous souhaitez effectuer" + prenom);
Scanner sc2 = new Scanner (System.in);
Intervalle = sc2.nextDouble();
while (Intervalle = ){
}
System.out.println("Entrez la température finale que vos souhaitez atteindre");
Scanner sc3 = new Scanner(System.in);
TemperatureFinale = sc3.nextDouble();
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 29 févr. 2012 à 09:11
Bonjour,
Si tu utilisais Swing pour faire des interfaces graphiques, je t'aurais dit d'utiliser un JFormatedTextField pour empêcher l'utilisateur d'entrer autre chose que des chiffres.
Mais dans la console, tu n'as pas d'autre solution que de vérifier ce que l'utilisateur a entré : il y a une solutions assez complexe mais très efficace : c'est l'utilisation des expressions régulières
Si tu récupères ce que l'utilisateur a entré dans une chaine de caractères que tu nommes chaine, ce test te permet de déterminer si ce que l'utilisateur a entré est bien un nombre à virgule (le séparateur est le .) :
Scanner détecte l'erreur de saisie et lève l'exception InputMismatchException (import java.util.InputMismatchException;)
Exemple pour la saisie du nombre de départ:
// Présentation du programme
boolean encore = true;
while(encore)
{
encore = false;
System.out.println("Bonjour," + prenom+ ", ceci est un programme de conversion Celcius-Farenheit, Veuillez entrer un nombre de départ SVP");
Scanner sc1 = new Scanner (System.in);
try
{
celcius = sc1.nextDouble(); // pas Celcius
}
catch (InputMismatchException ime) // import java.util.InputMismatchException;
{
System.out.println("ERREUR DE SAISIE");
encore = true;
}
}
Remarques:
Prend la bonne habitude de respecter les conventions de "nommage" même si ce n'est pas obligatoire:
Le nom des classe devrais commencer par une majuscule.
Celui des variables ou constantes par une minuscule...
cs_Stoufy1605
Messages postés61Date d'inscriptionvendredi 7 janvier 2011StatutMembreDernière intervention17 avril 20132 29 févr. 2012 à 12:01
Bonjour, vous m'avez beaucoup aider!
Je vous remercie à tous les deux pour votre réponse.
Danimo, merci pour ton conseil, je ferai attention. J'aurai juste encore une petite question :
Je ne connaissais pas catch et try, d'après mes recherches, il s'agit d'une méthode permettant de manager les erreurs. Ma question est donc la suivante : Comment fonctionne t-il théoriquement?
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 29 févr. 2012 à 13:06
Sur ce sujet, je te conseil de faire des recherches sur internet, c'est un peu trop touffu pour qu'on puisse t'expliquer ici.
En gros, dans un bloc try, quand une exception dont le type correspond à un bloc catch est levée alors, le bloc catch est exécuté. Le bloc finally est toujours exécuté.
Si InputMismatchException n'est pas levée par l'appel de nextDouble() alors le traitement est exécuté normalement, dons la console il y aura :
ok
terminé
Si InputMismatchException est levée alors, le bloc catch sera exécuté, dans la console, il y aura
ERREUR DE SAISIE
terminé
Les exceptions sont utilisées pour propager des erreurs et les traiter plus tard dans le code, il ne faut pas s'en servir pour vérifier tes données. Dans ce cas, ca peut fonctionner parce que c'est une exception levée par la méthode qui permet de récupérer un Double et donc, il faut bien que l'exception soit propagée pour être traitée.
C'est peu être un peu confus, mais pour faire simple et rapide, je ne peux pas faire mieux.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Stoufy1605
Messages postés61Date d'inscriptionvendredi 7 janvier 2011StatutMembreDernière intervention17 avril 20132 19 mars 2012 à 16:53
merci beaucoup pour votre aide, qui m'a été très précieuse!! dsl du retard, je n'avais pas cliqué sur m'envoyer un mail en cas de réponse. Bonne continuation à tous les 2.