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 -
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 <<---
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 <<---
A voir également:
- Next().charat(0)
- Remettre a 0 un pc - Guide
- Numéro de téléphone excel 0 - Guide
- 0 barré clavier ✓ - Forum Programmation
- Excel différent de 0 ✓ - Forum Excel
- Formule excel si inférieur à 0 égal 0 ✓ - Forum Excel
29 réponses
String reponse = "" ;
do
{
System.out.println("Voulez-vous continuer O/N ? ");
reponse = next();
}while( !reponse.EqualsIgnoreCase("O") && !reponse.EqualsIgnoreCase("N"));
do
{
System.out.println("Voulez-vous continuer O/N ? ");
reponse = next();
}while( !reponse.EqualsIgnoreCase("O") && !reponse.EqualsIgnoreCase("N"));
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")));
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")));
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 .
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 .
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
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
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 .
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 .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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 :)
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 :)
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
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
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 ;)
{
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 ;)