Problème java

Résolu/Fermé
rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008 - 24 juin 2008 à 16:06
xs21matra Messages postés 18 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 13 mars 2011 - 25 juin 2008 à 09:15
Bonjour,j'ai un petit problème d'exécution en java;je ne peux pas insérer une commande de lecture d'un caractère après la lecture d'un float,pour résumer voilà le code:
import java.util.Scanner;

public class ff {

  public static void main(String[] args )
  {
    Scanner sc=new Scanner(System.in);//Beaucoup mieux comme çà...


    System.out.println("Tapez une phrase..");
    String str;
    str=sc.nextLine();
    System.out.println("La voilà: "+str);

    System.out.println("Donnez un nb..");
    float s=sc.nextFloat();
    System.out.println("Le voilà: "+s);

    System.out.println("Donnez un caratère..");
    char a=sc.nextLine().charAt(0);
    System.out.println("Le voilà: "+a);

  }

}


et voilà son exécution avec le message d'erreur !:


Tapez une phrase..
hgh
La voilà: hgh
Donnez un nb..
2
Le voilà: 2.0
Donnez un caratère..
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
	at java.lang.String.charAt(Unknown Source)
	at ff.main(ff.java:20)


mais si je mets cette commande(lec au début tout passe bien
quelle est la solution et merci beaucoup d'avance..;)
A voir également:

1 réponse

xs21matra Messages postés 18 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 13 mars 2011 11
24 juin 2008 à 17:05
Salut

Malheureusement je ne peux tester ton code à l'heure actuelle.

Je pense que ton problème viens de là : "float s=sc.nextFloat();"
Cela ne vide pas le buffer du caractère "Return" saisie pour valider la saisie de nombre.

Du coup, ton prog ne te laisse même pas le temps de faire une saisie de caractère puisque ton "sc.nextLine()" qui suit détecte de suite ce "Return" et te renvoie donc une chaine vide dont le premier caractère n'existe pas.

Il te faut donc faire un flush de ton buffer entre tes deux saisies (fonction à retrouver ou utilise un sc.nextLIne() que tu n'affiches pas).

A+
0
rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008 1
24 juin 2008 à 20:57
merci pour cette explication;j'ai trouvé 2 solutions
* instancier un nouvel objet de la classe Scanner
ou bien tout simplement je remplace sc.nextLine().Atchar(0); par sc.next().charAt(0);
merci encore pour ton explication... ;)
0
xs21matra Messages postés 18 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 13 mars 2011 11 > rogina1 Messages postés 80 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 20 septembre 2008
25 juin 2008 à 09:15
A ton service ;)
0