Scanner de charAt

Fermé
hichiro - 19 mars 2014 à 16:04
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 19 mars 2014 à 20:46
Bonjour, j'ai un problème dans mon code mais impossible de comprendre pourquoi.. mon compilateur me donne un erreur à la ligne de code dans la boucle... Pourtant j'ai bien fait comme les tutos,... donc impossible de comprendre.

J'ai essayer en mettant dans un String puis en le passant avec .charAt(0); mais même erreur
vous avez une idée?


System.out.println("Sexe: (H ou F)");
char sexe = ' ';
do{
	sexe = sc.nextLine().charAt(0);
}while(sexe != 'H' || sexe != 'F');



P.S j'ai bien déclarer un scanner,.. j'ai plusieurs nextLine,.. juste avant celui ci...
P.S2 pour la déclaration du scanner est t'il possible de le déclarer que dans le main car je dois le fais dans chaque méthode qui en a besoin. Je trouve ça un peu barbant...
Merci d'avance :)
A voir également:

3 réponses

Utilisateur anonyme
19 mars 2014 à 16:34
Bonjour

La condition de ton while est mauvaise.
En effet ton caractère est toujours différent de 'H' ou différent de 'F' : il ne peut pas âtre égal aux deux à la fois !
C'est un && qu'il aurait fallu mettre

while(sexe != 'H' && sexe != 'F');
0
merci (je me sens bête ...) ^^'


edit: non toujours rien.. la console:
Age: (>=0)
2
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at mainElection.ajouterCandidatDansListe(mainElection.java:102)
at mainElection.testPousser(mainElection.java:65)
at mainElection.main(mainElection.java:8)
Sexe: (H ou F)
0
Utilisateur anonyme
19 mars 2014 à 18:02
En effet, ma remarque ne portait que sur la logique du programme.
Au passage, ce n'est pas le compilateur qui te donne cette erreur, c'est une erreur d'exécution.
Je ne connais pas Java et ses scanners, mais visiblement il te rend une ligne vide. Peux-tu tester la longueur rendue par sc.nextLine() et en refaire un autre si le premier n'a rien donné ? Au moins pour voir si le second te donne quelque chose, il restera à comprendre pourquoi après.
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
19 mars 2014 à 18:13
Il faudrait voir ce qu'il y a avant. Mais si ton âge tu le récupère avec des nextInt par exemple, ceux ci ne vont pas capturer les sauts de lignes, ils seront conservés jusqu'au premier nextLine et renvoyer une ligne vide avant même de te donner le curseur pour faire ta saisie. Ce qui explique pourquoi le message d'erreur apparaît avant que tu n'ai tapé H ou F...
0
merci le problème était bien le sc.nextInt() j'ai vider le \n et sa fonctionne mais j'ai une nouvelle erreur.. j'ai mi une flèches la ou sa coince, merci

                int nbListe = 5;
		ListeElectorale tabListe[] = new ListeElectorale[nbListe];
		int i=0;
		do{
			System.out.println("liste electorale n°"+(i+1)+"\nEntrer son nom:");
Erreur ici->	ListeElectorale l = new ListeElectorale(sc.nextLine());
			tabListe[i] = l;
			ajouterCandidatDansListe(tabListe[i], 12);
			i++;
		}while(i<nbListe);


est-ce que je peux stocker mes instance ListeElectorale dans un tableau de cette manière?
Comme je n'ai pas encore vraiment chipoter a tout cela j'ai un petit doute
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
19 mars 2014 à 19:42
Il faudrait voir comment est faite la classe ListeElectorale, je ne peux pas la deviner...
Remarque : ta boucle do/while est compliquée. Pour des opérations simples on utilises la boucle for.

int nbListe = 5;

ListeElectorale tabListe[] = new ListeElectorale[nbListe];

for (int i=0; i<nbListe; i++)
{
    System.out.println("liste electorale n°"+(i+1));
    System.out.print("Entrer son nom : ");
    String line = sc.nextLine();
    
    ListeElectorale liste = new ListeElectorale(line); // à vérifier
    ajouterCandidatDansListe(liste , 12);
    tabListe[i] = liste;
}
0
ma classe "ListeElectorale est assez simple, un String nom et une variable de classe qui contient le nombre d'instance créée et pour finir un tableau d'objet Candidat. Un unique constructeur avec le nom en param. Sinon qq getteur et un setteur. Plus des fonctions pour interagir avec le tableau de Candidat.

Dans le code poster il n'y a aucune erreur?
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
19 mars 2014 à 20:17
"un unique constructeur avec le nom en param"
Si ce constructeur est bien fait, non il n'y a pas d'erreur.

Mais si tu as une erreur, 1) dis laquelle, 2) montre le code de ce constructeur...
0
public class ListeElectorale {

	private String nom;
	private Candidat []tabCandidats = new Candidat[12];
	private int nbCandListe;
	private int nbCandFemme;
	private int nbCandHomme;
	private static int nbListeElectorale = 0;
	
	public ListeElectorale(String nom) {
		this.nom = nom;
		nbListeElectorale++;
	}
...


j'ai oublier de parler des private int mais ça na pas d'importance...

exemple d'utilisation


Entrer son nom:
PS
Entrer les candidats, maximum 12
Candidat n°1
Nom:
Rillers
Prénom:
Tony
Age: (>=0)
25
Sexe: (H ou F)
H
Nationalite:
Belge
Domicile:
Belgique
Voulez-vous entrer un nouveau candidat? (O : Oui / N : Non)
O
O
liste electorale n°2
Entrer son nom:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at mainElection.testPousser(mainElection.java:65)
at mainElection.main(mainElection.java:8)

0