我正在迭代名为 clientList 的ArrayList
个客户端,其中包含来自班级Client (user,pass)
ArrayList<Client> clientList= new ArrayList<Client>();
这是迭代。我想停止迭代,如果它找到一个给定的用户(用户),如果密码(通过)匹配:
for (Client c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found= true;
}
我正在尝试以下 while(found == false)但是如果它没有在ArrayList上找到用户就会被卡住:
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;
}
}
}
}
答案 0 :(得分:8)
找到值时,您应该break
离开循环。
for (something) {
if (anotherThingIsFound) {
break;
}
}
//Execution will continue here when you break...
请注意,借助标签,也可以打破嵌套循环。 E.g。
outer:
while (someCondition) {
for (criteria) {
if (somethingHappened) {
break outer;
}
if (anotherThingHashHappened) {
break;
}
}
//Execution will continue here if we execute the "normal" break.
}
//Execution will continue here when we execute "break outer;"
continue
也适用于标签。
答案 1 :(得分:5)
为什么不只是break
?
for (Client c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found = true;
break;
}
}
}
(我假设您需要区分到达终点和找到某人并且到达终点而不找到某人。您可能只需要虽然有一个变量,而不是两个......)
使用while
循环尝试,如果找不到用户,您将永远遍历整个列表,即使找到用户 ,它也会循环整个列表一次 - 因为你的for循环是里面 while循环。 while循环条件仅在每次迭代 of while循环时检查一次。
答案 2 :(得分:3)
您需要使用break
关键字:
for (Client c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found = true;
break;
}
答案 3 :(得分:2)
如果您想使用found
属性,请引入break
并删除while循环:
for (Cliente c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found= true;
}
}
if (found)
break;
}
这样,您不需要使用while
循环:
答案 4 :(得分:1)
我会这样写:
while (!found) {
for (Cliente c : clientList) {
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found= true;
break;
}
}
}
}
我的猜测是你没有覆盖Cliente
类中的equals和hashCode,或者它不正确。
答案 5 :(得分:1)
为简单起见,省略了无效安全和分级安全
public class Cliente {
public boolean equals(Object other){
Cliente cOther = (Cliente) other;
return this.getUser().equals(other.getUser()) &&
this.getPassword().equals(other.getPassword())
}
public int hashCode(){
return this.getUser().hashCode()*this.getPassword().hashCode();
}
}
...
Cliente c = new Cliente();
c.setPassword(pass);
c.setUser(user);
boolean found = clientList.contains(c);
答案 6 :(得分:1)
使用break
工作正常,但是如果你想用while循环来做,那么你可以这样做:
Iterator<Client> it = clientList.iterator();
while (it.hasNext() && !found) {
Client c = it.next();
userA = c.getUser();
if (userA.equals(user)) {
passA = c.getPassword();
if (passA.equals(pass)) {
loginOK = true;
found = true;
}
}
}