Problème algorithmique en java [Résolu]

cs_Stoufy1605 61 Messages postés vendredi 7 janvier 2011Date d'inscription 17 avril 2013 Dernière intervention - 29 févr. 2012 à 00:07 - Dernière réponse : cs_Stoufy1605 61 Messages postés vendredi 7 janvier 2011Date d'inscription 17 avril 2013 Dernière intervention
- 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");



}
}

}
Afficher la suite 

5 réponses

Répondre au sujet
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 29 févr. 2012 à 09:11
+3
Utile
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\\.]*");
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39
Utilisateur anonyme - 29 févr. 2012 à 10:35
+3
Utile
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 /...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
cs_Stoufy1605 61 Messages postés vendredi 7 janvier 2011Date d'inscription 17 avril 2013 Dernière intervention - 29 févr. 2012 à 12:01
+3
Utile
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?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Stoufy1605
cs_Julien39 6449 Messages postés mardi 8 mars 2005Date d'inscription 15 mars 2018 Dernière intervention - 29 févr. 2012 à 13:06
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Julien39
cs_Stoufy1605 61 Messages postés vendredi 7 janvier 2011Date d'inscription 17 avril 2013 Dernière intervention - 19 mars 2012 à 16:53
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Stoufy1605

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.