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
Bonjour,

Je viens d'écrire mon premier code tout seul (sans exemple). Quand je le lance dans Eclipse, rien ne s'affiche dans la console. Auriez-vous une explication ?

Autre problème, Eclipse freeze fréquemment et même ne réponds plus. J'utilise la version Kepler Service Release 2 (Build id: 20140224-0627).

Merci de votre aide.

package ctof;

import java.util.Scanner;

public class Class3 {

public static void main(String[] args) {

Float f;
Float 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);
}
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.nextFloat();
c = (f-32)/(5/9);
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.nextFloat();
f = ((9/5)*c)+32;
System.out.println(c+ "°C est égale à " +f+ "°F");
}

System.out.println("Voulez-vous recommencer ?");
reponse = sc.nextLine().charAt(0);

}
System.out.println("Au revoir.");
}

}


A voir également:

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

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.

1
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
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,
0
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
Je reviens vers vous pour un autre souci.

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

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)
0
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
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+
0

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

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.");

}
}
}
0
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
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

    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')
0
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
Je croyais avoir une indentation organisée... la preuve que non.

Merci beaucoup.
0