Problème en Java (charAt(0) ) !

Résolu
Sisiniya Messages postés 142 Date d'inscription   Statut Membre Dernière intervention   -  
guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Quand je compile mon programme , aucune erreur n'est détécté . Or , lors de l'exécution toute les lignes du code s'exécutent jusqu'à ce qu'il arrive à ce bloc érctit en dessous , et il m'affiche erreur et voilà ce qu'on m'affiche :

********************************************************************************
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
********************************************************************************
// Voilà la partie d'où vient l'erreur
char reponse = ' ' ;
do
{
System.out.println("Voulez-vous continuer O/N ? ");
reponse = sc.nextLine().charAt(0);

}while( reponse != 'O' && reponse != 'N');


Aidez - moi S'il vous Plaît !

Sisiniya .--
 Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul. 
                                      --->> auteur : Jules Renard <<---

29 réponses

tsou
 
String reponse = "" ;
do
{
System.out.println("Voulez-vous continuer O/N ? ");
reponse = next();

}while( !reponse.EqualsIgnoreCase("O") && !reponse.EqualsIgnoreCase("N"));
0
Utilisateur anonyme
 
Il faut utiliser soit

Scanner sc = new Scanner(System.in) ;


String entree = "";
char reponse = ' ';
do
{
System.out.println("Voulez-vous continuer O/N ? ");
entree = sc.nextLine();
try
{
reponse = entree.charAt(0);
}
catch(Exception E)
{
System.err.println("Erreur: " + E.getMessage());
System.out.println("Vous n'avez rien entré");
}

}while((reponse != 'O') && (reponse != 'N'));


soit

Scanner sc = new Scanner(System.in) ;


String entree = "";
do
{
System.out.println("Voulez-vous continuer O/N ? ");
entree = sc.nextLine();

}while ((!entree.equals("O")) && (!entree.equals("N")));
0
Sisiniya Messages postés 142 Date d'inscription   Statut Membre Dernière intervention   19
 
J'ai utilisé la 2éme :

Scanner sc = new Scanner(System.in) ;

String entree = "";
do
{
System.out.println("Voulez-vous continuer O/N ? ");
entree = sc.nextLine();

}while ((!entree.equals("O")) && (!entree.equals("N")));



ça marche bien , mais le seul souci c'est qu'il m'affiche deux fois <<Voulez-vous continuer O/N ? >> et après il me donne la main pour saisir la réponse !!


Je vous remercie tous pour vos réponses .

Merci danimo .


Sisiniya .
0
Utilisateur anonyme
 
Bonjour,

De toutes manières, remplace whil(..... par

}while ((!entree.equalsIgnoreCase("O")) && (!entree.equalsIgnoreCase("N")));

comme indiqué par tsou, ce qui te donnera la possibilité de saisir aussi bien en majuscule qu'en minuscule, mais qui ne resoudra pas le pb d'affichage 2 fois.

Es-tu certaine de ne pas avoir plus haut dans to prog. System.out.println("Voulez-vous continuer O/N ? "); ?

Cordialement.

Dan
0
Sisiniya Messages postés 142 Date d'inscription   Statut Membre Dernière intervention   19
 
Oui je suis certaine , Vraiment c'est Bizard !! .En fait , j'ai aimé bien la Méthode de equalsIgnoreCase("O") .

Une question si vous permettez _bien sûr _ :-) :

Si je déclare au début de mon programme ceci : << Scanner ob = new Scanner(System.in) ; >> Est ce que
J'ai le droit d'utilisé <<ob.nextLine(); >> pour lire des variables différents de Types String le long du Programme ou bien je doit à chaque fois créer un new Objet de classe Scanner ?

Merci Beaucoup .


Sisiniya .

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
Bonsoir,
Bien sûr, il faut garder le même objet et l'utiliser tout au long de ton programme (sinon ça va marcher aussi mais c'est moins bien).
Si ton objet est défini au sein d'une méthode, tu ne pourras l'utiliser qu'au sein de cette méthode.
Si tu en as besoin dans d'autres méthodes, il faut t'arranger pour augmenter la visibilité de ton objet (passage par paramètre de méthode, ou déclaration d'attribut si ça a un sens).

Cordialement
0
Sisiniya Messages postés 142 Date d'inscription   Statut Membre Dernière intervention   19
 
Merci beaucoup Pour Votre réponse :-) .
0
Achraf
 
Salam,

rep = next().charAt(0);
et non nextLine()..

apparemment il n'a pas de probléme avec la char mais plutot avec la String vu que tu lui demande d'extraire le premiére caractére de ce string qui est déclaré autant que char.

Bon courage :)
0
Achraf
 
grrrr..
rep = sc.next().charAt(0);
0
Utilisateur anonyme
 
Salut,

Les erreurs les plus grosses ne sont souvent pas vues !

Désolé ma petite lampe n'était pas encore allumée.

while ((!entree.equals("O")) && (!entree.equals("N"))); ferait l'affaire.

Si on frappe O c'est différent de N et si on frappe N c'est différent de O et on boucle !!!


while ((!entree.equals("O")) || (!entree.equals("N")));

Voila ce qu'il faut. Si entree = "O" c'est bon OU si entree = "N" c'est bon et on ne boucle plus...

Pour éviter de frapper O ou N obligatoirement en majuscule il serait bon après l'entrée d'ajouter :

reponse = reponse.toUpperCase();

Ainsi que l'on frappe soit O ou o , soit N ou n ce sera bon.

Cordialement.
Dan
0
guillaume_74 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   22
 
public static String lireString() // Lire un String
{
String tmp = "";
char C='\0';
try {
while ((C=(char) System.in.read()) !='\n')
{
if (C != '\r') tmp = tmp+C;

}
}
catch (IOException e)
{
System.out.println("Erreur de frappe");
System.exit(0);
}
return tmp;
}

Personnellement j'utilise cette fonction pour être sur de récupérer une chaine de caractère en ligne de commande.
cordialement ;)
0