为什么我无法登录?

时间:2019-08-16 01:00:38

标签: java

该循环发生故障。

我尝试用“等于”代替“包含”

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;
                }
            }
        }

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

2 个答案:

答案 0 :(得分:1)

主要问题在于您if-else的{​​{1}}声明中

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;
    }
}

答案 1 :(得分:1)

主要问题是在if-else语句中,我刚刚添加了break语句,因为当您找到匹配的名称时,您将继续循环,如果下一个名称不匹配,则在需要时将login的值设置为false要在找到要添加的匹配项时立即停止循环,因此应将contains更改为equals方法,因为如果键入例如“ jo”,则在使用contains时可以登录为“ john”

public static void main(String[] args) {
    // TODO code application logic here
     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.equals(users.get(i).getUserName() ) ) 
                {
                    loginUser=users.get(i);
                    login=true;
                    break;
                }
                else
                {
                    login=false;
                }
           }