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

Résolu/Fermé
Deezio Messages postés 37 Date d'inscription vendredi 22 juin 2012 Statut Membre Dernière intervention 19 avril 2018 - Modifié par Deezio le 25/08/2013 à 19:17
Deezio Messages postés 37 Date d'inscription vendredi 22 juin 2012 Statut Membre Dernière intervention 19 avril 2018 - 25 août 2013 à 19:48
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 août 2013 à 19:18
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 vendredi 22 juin 2012 Statut Membre Dernière intervention 19 avril 2018 2
25 août 2013 à 19:48
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