Besoin d'aide pour un programme [JAVA]

Le problème exposé dans ce sujet a été résolu.

Bonjour, J’ai récemment écrit le programme suivant qui, je ne sais pas pourquoi, ne marche pas. Lorsque je clique sur run, il s’exécute, mais le message suivant apparaît après la question demandant si l’utilisateur veut recommencer (la ligne 41 est celle de "wantToRestart = sc.nextLine().charAt(0);").

1
2
3
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at fr.klimex.test1114.Main.main(Main.java:41)"

Et voici le programme :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package fr.monpseudo.monprojet;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numberOfAnswer;
int valueToConvert;
int convertedValue;
char wantToRestart = ' ';
do{
System.out.println("Programme de conversion de degrès Celsius en degrès Farenheit\n");
System.out.println("Voulez-vous : ");
System.out.println("1 : Convertir une température donnée en degrès Celsius en degrès Farenheit.");
System.out.println("2 : Convertir une température donnée en degrès Farenheit en degrès Celsius.\n");
System.out.println("Tapez 1 ou 2 pour effectuer votre choix");
numberOfAnswer = sc.nextInt();

while(numberOfAnswer != 1 && numberOfAnswer != 2) {
System.out.println("Erreur : vous n'avez pas donné un nombre correct. ");
System.out.println("Tapez 1 ou 2 pour choisir votre conversion");
numberOfAnswer = sc.nextInt();
}

System.out.println("Maintenant, veuillez donner la valeur à convertir");
valueToConvert = sc.nextInt();

if(numberOfAnswer == 1) {
convertedValue = (9/5)*valueToConvert+32;
System.out.println(valueToConvert + " degrès Celsius correspondent à " + convertedValue + " degrès Farenheit.");
}
else {
convertedValue = ((valueToConvert-32)*5)/9;
System.out.println(valueToConvert + " degrès Farenheit correspondent à " + convertedValue + "degrès Celsius");
}

do{
System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
wantToRestart = sc.nextLine().charAt(0);

}
while(wantToRestart != 'O' && wantToRestart != 'N');

if (wantToRestart == 'O') {
System.out.println("Vous avez choisi de recommencer.");

}

}
while (wantToRestart == 'O');
}

}

Pourriez-vous me dire quelle est ma faute et me corriger s’il vous plaît ? Merci d’avance. P.S. Désolé si le message est tassé, mais le forum empêche trop de retours à la ligne. P.P.S. Le résultat souhaité est  : 1 : Le message de présentation. 2 : La question du sens de conversion. 3 : La réponse de l’utilisateur visant à donner le sens de conversion (avec une gestion des mauvaises réponses). 4 : La question demandant la valeur à convertir. 5 : L’affichage du résultat de la conversion. 6 : La question demandant si l’utilisateur veut recommencer. 7 : La réponse de l’utilisateur à cette dernière question. 8 : La répétition du programme si la réponse de l’utilisateur est "O".

+0 -0

Je pense que c’est parce que wantToRestart est égal à null (ou, du moins, est vide).

Essaye d’afficher le résultat de sc.nextLine() pour voir ce qu’il retourne.

Par exemple :

1
System.out.println("Valeur de nextLine : " + sc.nextLine());

Sinon, essaye comme ceci :

1
2
3
4
5
6
do{
    System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
    String nextLine = sc.nextLine();
    wantToRestart = nextLine.charAt(0);
}
while(wantToRestart != 'O' && wantToRestart != 'N');
+1 -0

Lorsque je supprime ma boucle et que j’écris l’instruction correspondant à l’affichage de nextLine, la chaîne de caractères que je tape est bel et bien affichée dans la console, mais, si je remplace la boucle suivante par celle que tu m’as donné, le programme ne fonctionne pas et affiche le même message d’erreur, mais en pointant cette fois la ligne 42 (wantToRestart = nextLine.charAt(0);) sachant qu’aucune erreur n’est détectée lorsque j’exécute le programme et qu’il ne s’arrête que lors de la lecture de la boucle qui pose problème.

1
2
3
4
5
6
do{
System.out.println("Souhaitez-vous convertir une autre température ?(O/N)");
wantToRestart = sc.nextLine().charAt(0);

}
while(wantToRestart != 'O' && wantToRestart != 'N');

P.S. Aucun des cryptogrammes montrant habituellement un problème n’est affiché dans la marge du programme.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte