L'arrêt d'une itération d'une liste de tableaux en Java
Je suis itération d'une ArrayList
de clients nommée clientList qui contient des clients de la classe Client (user,pass)
ArrayList<Client> clientList= new ArrayList<Client>();
Voici l'itération. Je veux arrêter l'itération s'il fonde un utilisateur (user) et si le mot de passe (pass) correspond à:
for (Client c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found= true;
}
J'ai essayé le suivant tandis que (trouve == false) mais c'est s'accrochent si elle ne marche pas à trouver un utilisateur sur la liste de tableaux:
while (found == false) { /
for (Client c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found= true;
}
}
}
}
- utilisation de mots clés:
break;
- Vous devriez également envisager d'utiliser un
HashMap
au lieu d'unList
. La clé de lauser
et la valeur de lapass
. Ensuite, votrefor
-boucle s'évanouit; vous obtenez plutôtif (hashMap.get(user).equals(pass))
. Mais vous devriez sérieusement modifier votre code pour que... leClient
classe ne serait pas nécessaire.
Vous devez vous connecter pour publier un commentaire.
Allais-je écrire de cette façon:
Ma conjecture est que vous n'avez pas remplacer equals et hashCode dans votre
Cliente
classe ou il n'est pas correct.break
,found
n'est pas plus nécessaireVous devriez
break
sortir de la boucle quand la valeur est trouvée.Noter qu'il est également possible de sortir de boucles imbriquées, avec l'aide d'étiquettes. E. g.
continue
ne travaillons également avec des étiquettes.Pourquoi ne pas simplement
break
?(Je suppose que vous devez dire à la différence entre arriver à la fin et trouver quelqu'un et arriver à la fin et pas de trouver quelqu'un. Vous avez probablement besoin d'une seule variable si, au lieu de deux...)
Avec votre
while
boucle tentative, vous allez effectuer une itération sur l'ensemble de la liste pour toujours si l'utilisateur n'est pas trouvé, et même si l'utilisateur est trouvé, il sera en boucle sur l'ensemble de la liste une fois - parce que votre boucle for est à l'intérieur de de la boucle while. La condition du while est seulement vérifié une fois par itération de la boucle while.Vous devez utiliser le
break
mot-clé:Voir Java mot-clé break de la documentation.
si vous souhaitez utiliser votre
found
d'un attribut, d'introduire unbreak
et de supprimer la boucle while:De cette façon, vous n'avez pas besoin d'utiliser le
while
boucle:Sauté null de la sécurité et de la classe de fonte de sécurité pour des raisons de simplicité
À l'aide de
break
fonctionne très bien, mais si vous voulais le faire avec une boucle while au lieu de cela, alors vous pourriez le faire comme ceci: