Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer un char

Problème

Sujet résolu
    22 juin 2009 à 17:51:38

    Bonjour,

    Je viens tout juste de commencer le Java et je suis actuellement rendu au TP du tableau de conversion. :)
    Malheureusement, j'obtiens une erreur à l'exécution lorsque j'essaie de demander à l'utilisateur s'il est prêt à
    recevoir le tableau.

    Pourtant, j'utilise la bonne méthode pour récupérer un caractère.
    Voici mon code:

    import java.util.Scanner;
    
    public class principal 
    {
        public static void main(String[] args) 
        {
            int temperatureDebut = 0;
    	int temperatureFin = 0;
    	int pasDeConversion = 0;
    	int temperatureCelsius = 0;
    	int temperatureFaren = 0;
    	int intervalle = 0;
    		
    	char recommencer = ' ';
    	char pret = ' ';
    		
    	Scanner scan = new Scanner(System.in);
    		
    	// Message de bienvenue
    	System.out.println("-----------------------------------------------");
    	System.out.println("|  Tableau de conversion Celsius - Farenheit  |");
    	System.out.println("-----------------------------------------------");
    		
    		
    
    	// Éliminer les cas impossibles
    	do
    	{
    	    System.out.println("À partir de: ");
    	    temperatureDebut = scan.nextInt();
    				
    	    System.out.println("Jusqu'à: ");
    	    temperatureFin = scan.nextInt();
    				
    	    System.out.println("Par pas de: ");
    	    pasDeConversion = scan.nextInt();
    				
    	    if(temperatureFin < temperatureDebut || pasDeConversion > temperatureFin - temperatureDebut)
    		  System.out.println("Traitement Impossible\n"); // Message d'erreur
    				
    	}
    	while(temperatureFin < temperatureDebut || pasDeConversion > temperatureFin - temperatureDebut);
    			
    	do // Tant que l'utilisateur n'est pas prêt
    	{
    	    System.out.println("Êtes-vous prêt ? (O/N)");
    	    pret = scan.nextLine().charAt(0);
    	}
            while(pret == 'N');		
        }
    }
    


    Notez que l'indentation est parfaite dans Éclipse, mais est merdique dans les balises, je ne
    sais pas vraiment pourquoi. Deuxième chose, je précise que la méthode contractée pour récupérer un char
    se trouve dans le chapitre des boucles.


    Que faire?
    Merci d'avance. :p
    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2009 à 17:57:10

      Cela ne serait pas plutôt :
      do // Tant que l'utilisateur n'est pas prêt
      	{
      	    System.out.println("Êtes-vous prêt ? (O/N)");
      	    pret = scan.nextLine().charAt(0);
      	}
      //Et c'est là que ça change
              while(pret != 'N');
      
      • Partager sur Facebook
      • Partager sur Twitter
        22 juin 2009 à 18:01:37

        Je pense pas car ça se répète tant qu'il n'est pas prêt, non ? :o
        Je vais mettre mon erreur:

        Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
                at java.lang.String.charAt(Unknown Source)
                at principal.main(principal.java:47)


        Je précise que lors de l'éxécution, je ne peut même pas entrer le caractère, pourtant j'ai mis un
        Scanner. o_O
        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2009 à 18:19:13

          do // Tant que l'utilisateur n'est pas prêt
          {
                   scan.nextLine();
          	 System.out.println("Êtes-vous prêt ? (O/N)");
          	 pret = scan.nextLine().charAt(0);
          }
          while(pret == 'N');
          
          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2009 à 18:33:48

            Merci beaucoup! :D

            Mais est-ce qu'il existe un moyen d'éviter cette erreur sans avoir a entrer une lettre,
            car je trouve cela indésirable (Si on répond Non, il faut toujours entrer une lettre
            avant de reposer la question)?

            Merci de m'expliquer car j'aimerais comprendre (c'est mieux que du copier-coller non? :p )



            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2009 à 18:50:38

              Pas compris la question.
              Pour attendre l'entrée utilisateur y'a pas d'autre moyen que la boucle infinie (du moins sans gérer d'évènements, ce que tu ne peux pas faire de toute manière en console).
              Sinon dans mon code c'est assez long à expliquer, la raison a été évoquée une bonne dizaine de fois sur ce forum, je t'invite donc à taper dans le champ de recherche "scanner marche pas".
              J'ai mis nextLine() en première instruction pour purger le scanner qui contient un retour à la ligne : ceci est dû à l'instruction nextInt() qui ne récupère pas le retour à la ligne mais juste l'entier tapé (or l'utilisateur tape l'entier puis la touche entrée).
              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2009 à 19:14:06

                Ah oui effectivement...
                Comment j'ai pu écrire une bétise pareille ? o_O
                • Partager sur Facebook
                • Partager sur Twitter

                Récupérer un char

                × 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