首页 > 解决方案 > 为什么我不能登录?

问题描述

循环出现故障。

我试过用“等于”替换“包含”

import java.util.*;
public class Main {   
    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);   
        User cg = new User("Clarke ","griffinc@gmail.com");
        User bb = new User("Bellamy ","blakeb@gmail.com");
        User ob = new User("Octavia ","blakeo@gmail.com");
        User rr = new User("Raven","reyesr@gmail.com");
        User jm = new User("John","murphyj@gmail.com");
        User mg = new User("Monty","greenm@gmail.com");

        ArrayList <User> users = new ArrayList<User>();
        users.add(cg);
        users.add(bb);
        users.add(ob);
        users.add(rr);
        users.add(jm);
        users.add(mg);

        //login
        boolean login = false;
        User loginUser = new User(" "," ");
        while (login == false) {
            for (int j = 0; j < users.size(); j++) {
                System.out.println(j+1 +":"+ users.get(j).getUsername());
            }
            System.out.println("Give your username:");  
            String username = scan.next();
            for (int i = 0; i < users.size(); i++) {
                if (username.contains(users.get(i).getUsername())) {
                    loginUser = users.get(i);
                    login = true;
                } else {
                    login = false;
                }
            }
        }

即使我将上述用户名作为答案,它也不会登录。它应该接受这些用户名作为正确答案并停止循环。然而,一切似乎都被认为是错误的答案。

标签: java

解决方案


主要问题在于你if-else对你的陈述for-loop

for (int i = 0; i < users.size(); i++) {
    if (username.contains(users.get(i).getUsername())) {
        loginUser = users.get(i);
        login = true;
    } else {
        login = false;
    }
}

在这里,除非您输入Monty,否则login将始终为false,因为它会在名称不匹配时重置。最好将其设置在循环之外,并且仅在需要时更改它,例如...

login = false;
for (int i = 0; i < users.size(); i++) {
    if (username.contains(users.get(i).getUsername())) {
        loginUser = users.get(i);
        login = true;
    }
}

另外,请注意,您的某些用户名末尾有空格...

User cg = new User("Clarke ","griffinc@gmail.com");
//                        ^--- This will screw with you

推荐阅读