Aide débutant, premier code
Résolu/Fermé
ju2201
Messages postés
13
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
18 mai 2014
-
1 mai 2014 à 11:42
ju2201 Messages postés 13 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 18 mai 2014 - 1 mai 2014 à 14:16
ju2201 Messages postés 13 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 18 mai 2014 - 1 mai 2014 à 14:16
A voir également:
- Aide débutant, premier code
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
6 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 mai 2014 à 11:58
1 mai 2014 à 11:58
Bonjour,
Ici ton programme tourne en rond, c'est normal qu'il n'affiche rien.
Il faudrait commencer par enlever les points-virgules après les while qui court-circuitent complètement le rôle des accolades qui suivent.
Pour Eclipse qui freeze cela peut lui arriver lorsqu'il travaille trop, par exemple lors de la compilation, ou si en arrière plan il est en train d'installer des mises à jour.
Généralement les tâches en cours sont indiqués en bas à droite d'Eclipse.
Ici ton programme tourne en rond, c'est normal qu'il n'affiche rien.
Il faudrait commencer par enlever les points-virgules après les while qui court-circuitent complètement le rôle des accolades qui suivent.
while (reponse=='o') { while (u !='F' && u!='C') {
Pour Eclipse qui freeze cela peut lui arriver lorsqu'il travaille trop, par exemple lors de la compilation, ou si en arrière plan il est en train d'installer des mises à jour.
Généralement les tâches en cours sont indiqués en bas à droite d'Eclipse.
ju2201
Messages postés
13
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
18 mai 2014
2
1 mai 2014 à 12:19
1 mai 2014 à 12:19
Merci beaucoup KX. Ma première question s'affiche !
Mon programme ne fonctionne toujours pas, mais j'avance.
Et je crois qu'Eclipse plantait car mon programme qui tournait en boucle plusieurs fois en même temps.
A bientôt,
Mon programme ne fonctionne toujours pas, mais j'avance.
Et je crois qu'Eclipse plantait car mon programme qui tournait en boucle plusieurs fois en même temps.
A bientôt,
ju2201
Messages postés
13
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
18 mai 2014
2
1 mai 2014 à 12:41
1 mai 2014 à 12:41
Je reviens vers vous pour un autre souci.
Voici le code modifié:
Tout fonctionne sauf à la fin, voici ce que me dit la console (il y a aussi un petit problème d'arrondi):
Quelle unité voulez vous convertir:
F : Fahreinheit
C : Celsius
Faites votre choix: F ou C ?
C
Quelle est la tempérture en °C à convertir en °F ?
23
23.0°F est égale à -16.363636363636363°C
Voulez-vous recommencer ? o/n
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at ctof.Class3.main(Class3.java:48)
Voici le code modifié:
package ctof;
import java.util.Scanner;
public class Class3 {
public static void main(String[] args) {
Double f;
Double c;
char reponse='o';
char u='x'; //Différent de F ou C pour que la seconde boucle "while" puisse démarrer
Scanner sc = new Scanner(System.in);
while (reponse=='o')
{
while (u !='F' && u!='C')
{
System.out.println("Quelle unité voulez vous convertir:");
System.out.println("F : Fahreinheit");
System.out.println("C : Celsius");
System.out.println("Faites votre choix: F ou C ?");
u = sc.nextLine().charAt(0);
if (u!='F' && u!='C')
System.out.println("Ce n'est pas un choix possible, écrivez F ou C.");
}
if (u=='C')
{
System.out.println("Quelle est la tempérture en °C à convertir en °F ?");
f = sc.nextDouble();
c = (f-32)/(0.55);
System.out.println(f+ "°F est égale à " +c+ "°C");
}
else
{
System.out.println("Quelle est la tempérture en °F à convertir en °C ?");
c = sc.nextDouble();
f = (1.8*c)+32;
System.out.println(c+ "°C est égale à " +f+ "°F");
}
System.out.println("Voulez-vous recommencer ? o/n");
reponse = sc.nextLine().charAt(0);
}
System.out.println("Au revoir.");
}
}
Tout fonctionne sauf à la fin, voici ce que me dit la console (il y a aussi un petit problème d'arrondi):
Quelle unité voulez vous convertir:
F : Fahreinheit
C : Celsius
Faites votre choix: F ou C ?
C
Quelle est la tempérture en °C à convertir en °F ?
23
23.0°F est égale à -16.363636363636363°C
Voulez-vous recommencer ? o/n
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at ctof.Class3.main(Class3.java:48)
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 mai 2014 à 13:05
1 mai 2014 à 13:05
Lorsque tu fais sc.nextDouble(); tu entres une valeur double ET un saut de ligne, car tu appuies sur Entrée pour valider la saisie. Le saut de ligne n'est pas lu et reste en mémoire. Lorsque ensuite tu fais un sc.nextLine() il est enfin lu, mais renvoie une chaîne de caractère vide (car ce qu'il y avait avant la fin de ligne a été lu par le double). Comme tu as une chaîne vide tu ne peux pas faire charAt(0) car le caractère 0 n'existe pas. D'où l'erreur String index out of range: 0
Pour résoudre le problème, il faut supprimer la fin de ligne après chaque nextDouble() en ajoutant un nextLine() dont tu n'auras pas besoin de récupérer la valeur.
Remarque : nextDouble ne renvoie pas un Double, mais un double, tu aurais donc tout intérêt à déclarer f et c en double, et non en Double (ça changera rien au programme, mais il vaut généralement mieux privilégier les types primitifs plutôt que leurs wrapper respectifs)
Pour résoudre le problème, il faut supprimer la fin de ligne après chaque nextDouble() en ajoutant un nextLine() dont tu n'auras pas besoin de récupérer la valeur.
f = sc.nextDouble(); sc.nextLine();
Remarque : nextDouble ne renvoie pas un Double, mais un double, tu aurais donc tout intérêt à déclarer f et c en double, et non en Double (ça changera rien au programme, mais il vaut généralement mieux privilégier les types primitifs plutôt que leurs wrapper respectifs)
ju2201
Messages postés
13
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
18 mai 2014
2
1 mai 2014 à 13:24
1 mai 2014 à 13:24
Merci KX pour ton aide précieuse. Tu m'as fait gagner beaucoup de temps.
J'ai fait comme tu as dit et ça fonctionne. Il restait une erreur que j'ai trouvé tout seul. Il fallait que je réinitialise la variable u au même niveau que le sc.nextLine() que tu m'as demandé d'insérer.
A+
J'ai fait comme tu as dit et ça fonctionne. Il restait une erreur que j'ai trouvé tout seul. Il fallait que je réinitialise la variable u au même niveau que le sc.nextLine() que tu m'as demandé d'insérer.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ju2201
Messages postés
13
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
18 mai 2014
2
1 mai 2014 à 13:30
1 mai 2014 à 13:30
Ah, non. Ca marche pas.
Quand je réponde "o" ou "n" à la dernière question, la boucle principale recommence. C'est surement tout bête, mais je vois pas. Au secours !
Quand je réponde "o" ou "n" à la dernière question, la boucle principale recommence. C'est surement tout bête, mais je vois pas. Au secours !
package ctof;
import java.util.Scanner;
public class Class3 {
public static void main(String[] args) {
double f;
double c;
char reponse='o';
char u='x'; //Différent de F ou C pour que la seconde boucle "while" puisse démarrer
Scanner sc = new Scanner(System.in);
while (reponse=='o')
{
while (u !='F' && u!='C')
{
System.out.println("Quelle unité voulez vous convertir:");
System.out.println("F : Fahreinheit");
System.out.println("C : Celsius");
System.out.println("Faites votre choix: F ou C ?");
u = sc.nextLine().charAt(0);
if (u!='F' && u!='C')
System.out.println("Ce n'est pas un choix possible, écrivez F ou C.");
if (u=='C')
{
System.out.println("Quelle est la tempérture en °C à convertir en °F ?");
f = sc.nextDouble();
c = (f-32)/(0.55);
System.out.println(f+ "°F est égale à " +c+ "°C");
}
else
{
System.out.println("Quelle est la tempérture en °F à convertir en °C ?");
c = sc.nextDouble();
f = (1.8*c)+32;
System.out.println(c+ "°C est égale à " +f+ "°F");
}
u='x';
sc.nextLine();
System.out.println("Voulez-vous recommencer ? o/n");
reponse = sc.nextLine().charAt(0);
}
System.out.println("Au revoir.");
}
}
}
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 mai 2014 à 13:40
1 mai 2014 à 13:40
Lorsque tu recommences o/n tu n'es pas dans la bonne boucle, tu es toujours dans le while (u !='F' && u!='C') donc la modification de reponse ne change rien...
Si tu avais une indentation un peu plus organisée tu aurais tout de suite vu ce problème.
Remarque : Eclipse peut indenter ton code tout seul en faisant Shift+Ctrl+F
Si tu avais une indentation un peu plus organisée tu aurais tout de suite vu ce problème.
Remarque : Eclipse peut indenter ton code tout seul en faisant Shift+Ctrl+F
if (u != 'F' && u != 'C') System.out.println("Ce n'est pas un choix possible, écrivez F ou C."); } // fin du while(u) ← ce qu'il te manque if (u == 'C')
ju2201
Messages postés
13
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
18 mai 2014
2
1 mai 2014 à 14:16
1 mai 2014 à 14:16
Je croyais avoir une indentation organisée... la preuve que non.
Merci beaucoup.
Merci beaucoup.