0
votes

Boucle toujours exécutant deux fois

Je fais actuellement un projet d'école et dans ce projet, je dois demander à l'utilisateur son sexe, puis afficher une erreur qui fonctionne. Mais pour une raison quelconque, la boucle exécute toujours deux fois avant de laisser entrer l'utilisateur à nouveau. Exemple: xxx

et voici le code xxx


0 commentaires

3 Réponses :


2
votes

Le problème est avec votre logique de condition. Essayez ce qui suit et assurez-vous de le comprendre. Faites-moi savoir si vous ne comprenez pas la logique conditionnelle. Codage heureux!

while ((sex != ('f') && sex != ('F')) && (sex != ('h') && sex != ('H'))){ 
   System.out.println ("Erreur veuillez entrer des valeurs valides");  //error message
   System.out.println ("Veuillez entrer le sex de l'individu f/F ou h/H: "); //asking for user inoput again
   sex = Clavier.lireChar();
}


4 commentaires

Je comprends pourquoi vous utilisez && au lieu de || Mais même avec votre solution, il répète encore la boucle deux fois avant de demander à une entrée à nouveau.


Si vous entrez un caractère de H, H, F, F, la boucle va sortir, c'est ce que vous voulez bien?


Ouais c'est exactement ce dont j'ai besoin.


OK, alors le problème est avec votre fonction d'entrée. Essayez la solution fournie par @that Autre gars.



1
votes

Le problème est que lorsque vous appuyez sur F code> suivi de Entrée, vous avez enfoncé deux touches et obtenez donc deux char code> S, une lettre minuscule F ( ' f ' code>) et un caractère ligneFeed / newline (' \ n ' code>).

Vous pouvez entrer de la même manière abc code> et appuyez sur Entrée, et vous appuyez sur Voir c'est des boucles 4 fois au lieu de 1. p>

Vous pouvez résoudre ce problème de deux manières. Le plus facile est probablement de lire un char code> en lisant une ligne entière, puis à l'aide de la première lettre. Je ne sais pas ce que ce Clavier CODE> classe est, mais s'il est similaire à Celui-ci Vous pouvez utiliser quelque chose comme: P>

while ((sex = Clavier.lireChar()) == '\n');


4 commentaires

Oui, j'ai déjà réparé le problème mentionné par Tushar mais à cause de la restriction que mon professeur nous a donné que je vais essayer la deuxième solution car elle ne permettra pas la première.


Je comprends donc ce que vous essayez de faire avec '\ n' mais je ne suis pas sûr où je devrais insérer tandis que ((sex = clavier.liechar ())! = '\ n'); pour cela travailler


@zactrixo j'ai accidentellement utilisé ! = au lieu de == . Vous pouvez remplacer sexe = clavier.lirechar (); avec tandis que ((sex = clavier.lechar ()) == '\ n'); où que vous utilisiez


Merci cela a fonctionné, j'espère juste que c'est une solution valide!



0
votes

Probablement en retard à la fête, voici une autre solution.

En tant que couple des personnes mentionnées, le problème semble être avec votre condition à l'intérieur de la boucle tandis que la boucle tandis que je suis un peu inquiet que votre professeur ne permet pas d'utiliser le scanner, cependant! xxx


2 commentaires

Oui, je ne sais pas pourquoi elle ne veut pas que nous utilisions le scanner, c'est mais comme je l'ai dit plus tôt, je ne peux pas non plus utiliser Char sex = in.Next (). Charat (0); Mais je ' Je vais continuer à faire ce que je peux et demandez à l'un des aides à l'école pour une solution.


@zactrixo Sure chose. Je ne sais pas quel point votre professeur essaie de prouver. Bonne chance!