Exception in thread "main" [Débutant Java]

Résolu
Deezio Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   -  
Deezio Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je débute dans la programmation sous Java. J'ai essayé de m'exercer un peu et comme le conseil un tutoriel sur le Site du Zero, faire un convertisseur Celsius - Fahrenheit et vice-versa.
Cependant j'ai une erreur quand je le lance :
"Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at Convertisseur.main(Convertisseur.java:27)"

Voici mon programme (comme vous pourrez le constater, il n'est pas terminé) :
import java.util.Scanner;


public class Convertisseur {
 public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
  
  System.out.println("CONVERTISSEUR DEGRES CELSIUS ET DEGRES FAHRENHEIT");
  System.out.println("-------------------------------------------------");
  char reponse = 'O';
  do
  {
   System.out.println("Choisissez le mode de conversion :");
   System.out.println("1 - Convertisseur Celsius - Fahrenheit");
   System.out.println("2 - Convertisseur Fahrenheit - Celsius");
   int mode = sc.nextInt();
  
   if (mode == 1);
   {
    System.out.println("Temperature à convertir :");
    float temp = sc.nextShort();
    System.out.print(temp+" °C correspond à : ");
    temp = (((9*temp)/5)+32);
    System.out.println(temp+" °F.");
    System.out.println("Souhaitez-vous convertir une autre temperature ?(O/N)");
   }
   reponse = sc.nextLine().charAt(0);
  }while (reponse == 'O');
  
 }
}

J'ai remarqué que lorsqu'il n'y a que des variables String dans la boucle, il n'y a pas de problème sauf qu'il me faut un variable float pour mon calcul. Comment faire ?
Merci pour votre aide et pour vos réponses.
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il faut se méfier du mélange nextInt / nextLine, en effet le premier lit un entier et s'arrête (il ne va pas jusqu'à la fin de la ligne) et le deuxième lui va jusqu'à la fin de ligne, mais en commençant là où en était resté, c'est à dire à la fin de la ligne de l'entier, pas de la ligne d'après !

Ce qu'il faudrait faire c'est mettre un nextLine juste après le nextInt afin de sauter la fin de ligne de l'entier, sinon quand tu feras le nextLine tu te retrouves avec un String vide et le charAt(0) plante !

int mode = sc.nextInt();
sc.nextLine(); // on finit la ligne

Remarque : c'est pareil avec nextShort, par contre je ne vois pas pourquoi tu fais un nextShort pour récupérer un float, tu peux faire un nextFloat si tu veux !
0
Deezio Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Un grand merci, tout marche très bien maintenant !
PS : J'avais mis un nextShort au lieu de nextFloat car a l'origine mon "temp" étais un Short, et j'ai ensuite oublier de changer le nextShort.
Mais vraiment, merci !
0