Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1451 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Exercice Java Openclass

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exercice Java Openclass

n°2251229
lululili
Posté le 19-02-2015 à 20:23:59  profilanswer
 

Bonjour, j'essaie d'apprendre toute seule les bases de la programmation Java...

 

J'ai donc tenté de réaliser le premier exercice proposé sur le site openclass(http://openclassrooms.com/courses/apprenez-a-programmer-en-java/tp-conversion-celsius-fahrenheit), un programme basique de conversion des Celsius en Fahrenheit et réciproquement...
Seulement mon code ne marche pas, et je ne comprends absolument pas pourquoi.
La conversion  est fausse, et la fin de la boucle me donne une erreur comme quoi" String index out of range: 0"; ce qui n'est d'ailleurs pas étonnant puisqu'il ne me demande pas de rentrer une valeur pour sortie...

 

Je vous copie colle mon code.
Merci beaucoup pour votre patience et avoir pris la peine de me lire,
A bientôt

 
Code :
  1. import java.util.Scanner;
  2. public class essai {
  3. public static void main(String[] args) {
  4.  //début
  5.  char sortie;
  6.  int mode;
  7.  do{
  8.   Scanner sc = new Scanner(System.in);
  9.   do
  10.   {
  11.    System.out.println("1 pour convertir en Farenh, \n2 en Celsius" );
  12.    mode = sc.nextInt();
  13.   }while (mode != 1 && mode !=2);
  14.   System.out.println("temperature?" );
  15.   int t = sc.nextInt();
  16.   double t2;
  17.   if (mode == 1)
  18.   {
  19.    t2 = arrondi((9/5) *t +32,2);
  20.    System.out.println(t + "C correspond à " + t2 +"F" );
  21.   }
  22.   else
  23.   {
  24.    t2 = arrondi(((t-32)*5)/9,2);
  25.    System.out.println(t + "F correspond à " + t2 +"C" );
  26.   }
  27.   System.out.println("encore? O/N" );
  28.   sortie = sc.nextLine().charAt(0);
  29.  }while (sortie == 'O') ;
  30.  System.out.println("bye" );
  31.  // TODO Auto-generated method stub
  32. }
  33. public static double arrondi(double A, int B) {
  34.    return (double) ( (int) (A * Math.pow(10, B) + .5)) / Math.pow(10, B);
  35.  }
  36. }

Message cité 1 fois
Message édité par lululili le 19-02-2015 à 23:21:48
mood
Publicité
Posté le 19-02-2015 à 20:23:59  profilanswer
 

n°2251259
leonhard
Posté le 20-02-2015 à 11:11:35  profilanswer
 

lululili a écrit :

Bonjour, j'essaie d'apprendre toute seule les bases de la programmation Java...  
 
J'ai donc tenté de réaliser le premier exercice proposé sur le site openclass(http://openclassrooms.com/courses/apprenez-a-programmer-en-java/tp-conversion-celsius-fahrenheit), un programme basique de conversion des Celsius en Fahrenheit et réciproquement...
Seulement mon code ne marche pas, et je ne comprends absolument pas pourquoi.
La conversion  est fausse, et la fin de la boucle me donne une erreur comme quoi" String index out of range: 0"; ce qui n'est d'ailleurs pas étonnant puisqu'il ne me demande pas de rentrer une valeur pour sortie...
 
Je vous copie colle mon code.
Merci beaucoup pour votre patience et avoir pris la peine de me lire,
A bientôt
 

Code :
  1. t2 = arrondi((9/5) *t +32,2);


 
 
voilà une erreur classique que nous avons tous faite un jour.  
 
La fraction (9/5) vaut 1 parce que les calculs se font en entier. Donc tu as t2 = t + 32, ce qui n'est pas exactement le résultat cherché. Pour corriger cela tu peux éventuellement écrire
t2 = (9.0 / 5.0) * t + 32;  et là la fraction vaudra bien les 1.8 cherché. Plus simplement écrit t2= 1.8 * t + 32
 

Code :
  1. sortie = sc.nextLine().charAt(0);



 
as-tu regardé ce que lisait le scanner ? Un peu plus haut tu as entré une valeur numérique suivie d'un "return". La méthode nextInt() a lu les chiffres pour faire un nombre, mais a laissé le "return" dans le flux d'entreé. Maintenant tu appelles la méthode "nextLine()" qui va lire jusqu'à ce qu'elle trouve un return. Comme il y en a déjà un, elle n'a pas besoin d'attendre une entrée de l'utilisateur. Il faut donc que tu arrive à vider le flux avant de lire la réponse O/N de l'utilisateur.
 
Bonne journée

n°2253121
Fraisouill​e
Grouik Grouik
Posté le 12-03-2015 à 17:19:49  profilanswer
 

Pour arrondir proprement, tu as la méthode Math.round(val) qui fait ça très bien :-)

 

Quand tu te contentes de caster en int, tu prends la partie entière mais tu ne fais pas l'arrondi :
9.8 casté en int, ça fait 9. Alors que Math.round(9.8) va renvoyer 10.


Message édité par Fraisouille le 12-03-2015 à 17:20:05
n°2253347
lululili
Posté le 16-03-2015 à 12:01:59  profilanswer
 

Un énorme merci à vous deux !  
Leonard ton explication était extrêmement claire et grâce à toi j'ai compris les erreurs !  
Fraisouille merci pour cette méthode que je connaissais pas ! Merci encore à vous d'avoir le temps de me lire et de répondre, (surtout que lire du code comme ça ça doit pas être spécialement amusant ^^)
Bonne journée :bounce:

n°2253351
Fraisouill​e
Grouik Grouik
Posté le 16-03-2015 à 13:24:19  profilanswer
 

P'tit complément pour les nombres :

 

1 -> c'est un int
1.0 ou 1.0d ou 1d -> c'est un double
1f ou 1.0f -> c'est un float
1l -> c'est un long

 

Typiquement, si tu veux faire une division avec un résultat sous forme d'entier, tu vas écrire :
9/5
si tu veux récupérer un float, tu peux écrire :
9/5.0f ou 9/5f
si tu veux récupérer un double, tu peux écrire :
9/5.0 ou 9/5.0d ou 9/5d

 

(sachant que dans le cas d'une division, c'est le diviseur qui type l'opération)


Message édité par Fraisouille le 16-03-2015 à 13:24:55
n°2253381
lululili
Posté le 16-03-2015 à 19:26:08  profilanswer
 

Ah oki ! Merci pour ces précisions ! ^.^


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Exercice Java Openclass

 

Sujets relatifs
Réalisation d'un framework de log java[JAVA] Parser un fichier de log sans le locker
ouvrir un fichier texte en javaAide programme java
Aide pour programme javaExercice Java
besion solution Exercice SQLbesoin d'aide pour un programme java (urgent =x )
Outils pour programmer en Java 
Plus de sujets relatifs à : Exercice Java Openclass


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR