Problème algorithmique en java

Résolu
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 - 29 févr. 2012 à 00:07
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 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, veuillez entrer votre prénom, SVP");
Scanner sc = new Scanner(System.in);

String prenom = sc.nextLine();

// Présentation du programme




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();

while (TemperatureFinale = ){


}


while (TemperatureFinale > Farenheit ){



Farenheit = 9/5 * Celcius + 32;


}



System.out.println("-----------------------------------");
System.out.println("Farenheit / Celcius");



}
}

}

5 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
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 .) :

chaine.matches("[0-9\\.]*");
3
Utilisateur anonyme
29 févr. 2012 à 10:35
Salut,

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...

http://www.loribel.com/java/normes/nommage.html

Cordialement,


...\ Dan /...
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
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?
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
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é.

Par exemple
try {
    celcius = sc1.nextDouble();
    System.out.println("ok");
}
catch (InputMismatchException ime) {
    System.out.println("ERREUR DE SAISIE");
    encore = true;
}
finally {
    System.out.println("terminé");
}


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.
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
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.
3
Rejoignez-nous