Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème dans mon programme

Sujet résolu
    19 juillet 2011 à 15:27:06

    Bonjour à tous !
    Alors voilà, je fais le premier TP de programmation Java et j'ai un problème vers la fin du code. Voici mon code :
    import java.util.Scanner;
    
    
    
    public class sdz1 {
    
    	public static void main(String[] args) 
    	{
    		Scanner sc = new Scanner(System.in);
    		int choix;
    		double temperature, resultat = 0;
    		char recommencer =' ';
    		
    		System.out.println("----------------------------------------------");
    		System.out.println("CONVERTISSEUR DEGRE CELSIUS - DEGRE FAHRENHEIT");
    		System.out.println("----------------------------------------------");
    		System.out.println("");
    		do {
    		do {
    		System.out.println("1 - Convertisseur Celsius - Fahrenheit");
    		System.out.println("2 - Convertisseur Fahrenheit - Celsius");
    		choix = sc.nextInt();
    		} while (choix != 1 && choix != 2);
    		
    		System.out.println("Temperature a convertir : ");
    		temperature = sc.nextDouble();
    		
    		if(choix == 1){
    			resultat = ((9.0 / 5.0) * temperature) + 32.0;
    			System.out.println(temperature + "°C vaut " + resultat +"°F");
    		}
    		else
    		{
    			resultat = ((temperature - 32.0) * 5.0) / 9.0;
    			System.out.println(temperature + "°F vaut " + resultat +"°C");
    		}
    		System.out.println("Voulez-vous recommencer ?(O/N)");
    		recommencer = sc.nextLine().charAt(0);
    	} while(recommencer == 'O');
    		
    		
    		
    		
    	}
    }
    


    Quand je lance le programme, tout se passe bien sauf quand j'arrive à la ligne 38. Il me lève ce message d'erreur :
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at sdz1.main(sdz1.java:38)

    Quelqu'un pourrait-il me dire d'où vient le problème. Car j'ai vérifier la correction, je ne trouvve toujours pas mon erreur. Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      19 juillet 2011 à 16:00:32

      sans te donner de réponse à la cause de ton probleme (pour le moment laisse moi le tester)

      l'idée c'est que quand tu recupere la derniere ligne ( le o ou le n ) ton scanner recupere une ligne null ( avec 0 caractère dedans)
      donc si tu lui fait charAt(0) il te donne cette erreur


      comment recuperer la premiere lettre d'une chaine qui n'en a pas!
      • Partager sur Facebook
      • Partager sur Twitter
        19 juillet 2011 à 16:02:35

        Non mais il va surtout tourner en rond pendant 50 ans parce que ça tu peux pas l'inventer.

        La faute à l'idiot de nextInt qui lit juste ton chiffre et qui laisse le '\n' (retour ligne). Du coup comme nextLine() est en attente d'un '\n' il trouve celui du nextInt() et hop il recupère ce qu'il y a avant c'est à dire rien. L'erreur arrive parce que tu essayes de manipuler une chaine vide. Fais ça et ça fonctionnera:

        System.out.println("Voulez-vous recommencer ?(O/N)");
        sc.nextLine(); //Tu dégage le \n qui était resté
        recommencer = sc.nextLine().charAt(0);
        
        • Partager sur Facebook
        • Partager sur Twitter
          19 juillet 2011 à 16:06:40

          @ramius: merci je savis pas en faite j'ai jamais utilié les scanner XD donc je tournais moi aussi en rond <3

          sympa comme tp en tout cas ^^
          • Partager sur Facebook
          • Partager sur Twitter

          Problème dans mon programme

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown