java : probleme avec la class Scanner
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

java : probleme avec la class Scanner



  1. #1
    docEmmettBrown

    java : probleme avec la class Scanner


    ------

    Bonjour,

    Je veux Convertir des Celcius en Fahrenheit et vice-versa, la conversion se passe bien, mais j'arrive à une erreur que je n'arrive pas à résoudre,
    voici mon code :
    Code:
    public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		char select;
    	        float temperature, temperature_convertie;
                    int selection;
    
    		while(true){
    			System.out.println("Choisissez le mode de conversion :\n1 -> Conversion Celcius-Fahrenheit\n2 -> Conversion Fahrenheit-Celcius ");
    			selection = sc.nextInt();
    
    			
    			if(selection == 1){
    				System.out.println("conversion en Celcius, indiquer la temperature a convertir :");
    				temperature = sc.nextFloat();
    				temperature_convertie = (temperature  - 35) *5/9;
    				System.out.println(temperature + " °F coorespond à "+ temperature_convertie+" °C");
    			}
    			else if(selection == 2){
    				System.out.println("conversion en Fahrenheit, indiquer la temperature a convertir :");
    				temperature = sc.nextFloat();
    				temperature_convertie = temperature * 9/5 + 32;
    				System.out.println(temperature + " °C coorespond à "+ temperature_convertie+" °F");
    
    			}
    			
    			System.out.println("Voulez vous faire une autre conversion (O/N) :");
    		
    			select = sc.nextLine().charAt(0); //erreur ici!!
    			if(select == 'N')break;
    			
    		}	
    		
    		System.out.println("Au revoir ...");
    
    	}
    tout fonctionne bien quand je compile, et quand je lance le programme tout ce passe bien (j'arrive à convertir mes données) avant d'arriver à "select = sc.nextLine().charAt(0);"
    la je recois dans mon terminal :
    Voulez vous faire une autre conversion (O/N) :
    Exception in thread "main" java.lang.StringIndexOutOfBoun dsException: String index out of range: 0
    at java.lang.String.charAt(Unknow n Source)
    at testjava1.main.main(main.java: 33)

    et je sais pas du tout pourquoi, car si je retire tout dans mon code et je met uniquement :
    Code:
    System.out.println("Voulez vous faire une autre conversion (O/N) :");
    select = sc.nextLine().charAt(0); //erreur ici!!
    Tout se passe bien...


    Avez vous une idée d'ou provient le probleme ?

    Merci d'avance

    -----

  2. #2
    invitef5cd9b59

    Re : java : probleme avec la class Scanner

    Bonjour remplace ta ligne d'erreur par celle-ci :

    Code:
    select =sc.next().charAt(0); //erreur ici!!
    Le problème vient du fait que tu a utilié :

    Code:
    sc.nextFloat();
    juste avant ce qui a pour cause de laisse une ligne vide ce qui donne ton erreur.

  3. #3
    docEmmettBrown

    Re : java : probleme avec la class Scanner

    je ne comprend pas trop, si j'utilise nextFloat() alors je ne peux plus utiliser nextInt() ou nextDouble() ... ?

  4. #4
    invitef5cd9b59

    Re : java : probleme avec la class Scanner

    Je vous propose de comprendre ça avec une méthode empirique :

    Créez un nouveau programme et mettez ça dans le main :


    Code:
    public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
                      System.out.println("Entrez un entier :");
    		  System.out.println(sc.nextInt());
                      System.out.println("----------");
                      System.out.println("Entrez un entier :");
                      System.out.println(sc.nextInt());
    
    	}
    Et lors de la premiere entrez metter ça : "25 26" avec un espace entre les deux entier. Le Scanner analyse un flux lorsque que vous lui dites sc.nextInt() il va piocher le premier entier trouver dans le flux par rapport où il est et l'extraire, si le flux et vide alors il vous demandera de le remplir en vous proposant de taper au clavier si il ne l'est pas il piochera le prochain dans le flux.

    Lorsque vous faite nextFloat et ensuite appelez nextLine. Il va piocher le premier float trouver et lors de l'appelle de nextLine il va retourner une chaîne vide car vous avez prélever le float mais la ligne existe encore. En appellant next vous irez directement après cette ligne vide et donc le scanner vous redemandera de taper votre réponse dans l'entrée standard.

  5. A voir en vidéo sur Futura
  6. #5
    docEmmettBrown

    Re : java : probleme avec la class Scanner

    Ok, mais pourtant quand je passe de :
    temperature = sc.nextFloat();
    le flux devient vide car je récupere le float, alors à l'appelle de :
    select = sc.nextLine().charAt(0);
    je devrais récupérer ma valeur car je fais appelle à next

  7. #6
    invitef5cd9b59

    Re : java : probleme avec la class Scanner

    Pas vraiment je te construit ce qui se passe en réalité nextfloat(), que tu entre 29 par exemple et que tu appelle nextLine().charAt(0):

    ->Tu appelle nextfloat()
    -> Tu rentres la valeur 29
    -> le flux est alors constitué comme ça : "29\n" ("\n" le saut de ligne) une fois entré
    -> Ta fonction retire le float alors il reste juste "\n"
    -> Tu appelle nextLine() ta fonction analyse le "\n"
    -> la fonction détermine qu'il y a une ligne avec la string : ""
    -> elle appelle alors la fonction charAt(0) sur la String ""
    -> comme ta string est vide la fonction soulève une erreur comme quoi ton index n'est pas dans les bornes.

    En appellant deux fois nextLine() tu résous le problème car tu retire la ligne vide dans un premier temps et le scanner te demande alors de remplir le flux, en appellant Next() tu vas récupèrer le prochain contenu non vide du flux comme il n'y en a pas il te demande de le remplir à nouveau ce qui te permet de récupérer alors le O ou le N.

  8. #7
    docEmmettBrown

    Re : java : probleme avec la class Scanner

    ok j'ai compris, merci beaucoup pour ton aide

Discussions similaires

  1. Probleme de scanner avec Brother DCP 353 C
    Par invite67faee04 dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 16/01/2009, 22h19
  2. Problème avec le scanner de l'Epson RX 620
    Par invite55ab1e08 dans le forum Matériel - Hardware
    Réponses: 12
    Dernier message: 07/09/2008, 09h58
  3. [JAVA] Problème avec JRE
    Par invitee3365b66 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 29/06/2007, 13h44
  4. problème avec scanner , message d'erreur
    Par invite1dec579f dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 11/02/2007, 00h47
  5. problème avec java
    Par invite0cbe5157 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 04/02/2007, 01h52