Forum Clubic

Erreur sur mon programme

bonjour,
j’ai commencé à apprendre le java il y a quelques jours en suivant un tuto dans lequel figure un TP qui nous demande de créer un convertisseur celsius - fahrenheit mais je n’arrive pas a faire fonctionner une boucle while.
mon code :

import java.util.*;

public class first {
public static void main(String[] args) {
char reponse = ‘O’;
Scanner co = new Scanner (System.in);
while(reponse == ‘O’)
{
int temp;
System.out.println("Choisissez votre conversion: ");
System.out.println(“1-Celsius vers Fahrenheit”);
System.out.println(“2-fahrenheit vers Celsius”);
temp = co.nextInt();
switch (temp)
{
case 1:
System.out.println(“température à convertir:”);
double celsius = co.nextDouble();
double far = ((9.0 / 5.0) * celsius) + 32f;
System.out.println(“température en fahrenheit :” + far);
break;
case 2:
double celsius2;

	System.out.println("température à convertir:");
	double far2 = co.nextDouble();
	celsius2 = ( ( far2 - 32 ) * 5 ) / 9;
	System.out.println("température en celsius :" + celsius2);	
	
	    break;
	default:
	System.out.println("erreur");
	}
	System.out.println("recommencer?");
	System.out.println("O/N"); 
	reponse = co.nextLine().charAt(0); 
	 }
	 co.close();
	 
 }
 }

et le message d’erreur :

Choisissez votre conversion:
1-Celsius vers Fahrenheit
2-fahrenheit vers Celsius
1
température à convertir:
9
température en fahrenheit :48.2
recommencer?
O/N
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at first.main(first.java:37)

le programme bug lorsque la boucle devrait logiquement recommencer , pouvez vous m’aider svp

Ton erreur est logiquement quand tu fais :

co.nextLine().charAt(0);

Si tu tapes “entrée”, alors, tu as une ligne vide. Une ligne vide produit une chaîne de caractère vide, et charAt(0) produit une StringIndexOutOfBoundsException car la chaine est vide.

merci de ta réponse rapide , mais je ne vois pas du tout comment faire pourrait -tu me dire par quoi remplacer cette ligne pour que ma réponse (o ou n) sois stoqué dans ma variable reponse

ce que j’ai essayé c’est de passé par une variable String appelé str
et jai remplacé la ligne bugé par :

str = co.nextLine();
reponse = str.charAt(0);

et la l’erreur reste la :confused:
désolé cela est peut etre logique mais je comprends vraiment pas pourquoi !

:hello:

Tu as l’erreur même si tu tapes une lettre (ou un mot d’ailleurs) avant d’appuyer sur entrée ? :confused:
Edité le 10/01/2014 à 20:40

Pour debugger ton problème, tu devrais essayer de comprendre la String que tu obtiens par le Scanner.

Avant d’essayer de récupérer le charAt(0), essaie donc

  • d’afficher la longueur de ta String
  • si la longueur est supérieure à 0, afficher le contenu entier de ta String
  • si la longueur est égale à 0, aller chercher la nextLine de ton Scanner