比较登录表单的两个数组

时间:2013-11-13 17:30:32

标签: java arrays

我目前有两个包含用户名和密码的数组。

   String[] UsernameArray = {"John","Per","Daniel","Jonathan"};
   String[] PasswordArray = {"Davis","Harring","Smith","West"};'

现在我的if语句看起来像这样:

if(Arrays.asList(UsernameArray).contains(LoginPanel.Username)&& Arrays.asList(PasswordArray).contains(LoginPanel.Password)) {
                   //Do something
    }

一切都运行良好,除了我只希望各自的人使用他们各自的姓氏作为密码。我希望例如用户名为“John”,密码为“Davis”。

截至目前,如果我进入约翰,然后输入第二个人的姓氏“哈灵”,我得到“成功!”并登录。如何改变这一点,以便人员密码只能是他们自己的姓氏,而不是其他任何人的姓名?

6 个答案:

答案 0 :(得分:1)

您需要确保字符串在各自的数组中处于相同的索引处。使用indexOf方法:

if (Arrays.asList(UsernameArray).contains(LoginPanel.Username) &&    
    Arrays.asList(PasswordArray).contains(LoginPanel.Password) && 
    //this way me make sure the username and password are at the same position. 
    Arrays.asList(UsernameArray).indexOf(LoginPanel.Username) == Arrays.asList(PasswordArray).indexOf(LoginPanel.Password) 
)
{
                   //Do something
}

您可能希望使用一些局部变量来避免对Arrays.asList进行如此多的调用,每次调用它时都会创建一个新列表。

答案 1 :(得分:1)

为此目的,您不需要ArrayList,这是浪费内存,您只能使用数组。

循环遍历数组并检查给定的用户名是否正确,保存该用户名的索引并检查该索引处的密码是否与用户输入的密码相同。像这样:

for (int i=0; i<usernameArray.length; i++) {
    if (LoginPanel.username.equals(usernameArray[i]) && LoginPanel.password.equals(passwordArray[i])) {
        //right credentials
    }
}

要明确: inputUserinputPassword是用户输入的用户名和密码

注意:正如您所看到的,我使用了usernameArraypasswordArrayLoginPanel.usernameLoginPanel.password 小写u和p :这是因为java命名约定,你应该用小写字母开始变量名。

答案 2 :(得分:0)

使用indexOf:

List<String> usernames = Arrays.asList(UsernameArray);
if (usernames.contains(LoginPanel.Username) &&
    PasswordArray[usernames.indexOf(LoginPanel.Username)].equals(LoginPanel.Password)) {
        // Do something
}

答案 3 :(得分:0)

来自API文档

boolean contains(Object o)

如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素e时才返回true(o == null?e == null:o.equals(e))。

在您的情况下,UsernameArray包含 John PasswordArray包含 Harring ,因此Arrays.asList(UsernameArray).contains(LoginPanel.Username)&& Arrays.asList(PasswordArray).contains(LoginPanel.Password)返回true。

您可以使用用户名密码地图,例如

Map<String,String> map = new HashMap<String,String>();
map.put("John","Davis");

然后可以验证

String password= map.get(LoginPanel.Username);
if(LoginPanel.Password.equals(password0){
        //Do something
}

请注意,在真实的网络应用程序中,密码将加密存储在某些数据存储中,而不是存储在程序中。

答案 4 :(得分:0)

你可以这样做:

for(int i=0;i< UserNameArray.length; i++){
    if(UserNameArray[i].equals(LoginPanel.Username)&& PasswordArray[i].equals(LoginPanel.Password)){
//do something
}

答案 5 :(得分:0)

简单的方法是

public class LoginTestEasy {

public static void main(String[] args) {
    String[] UsernameArray = {"John","Per","Daniel","Jonathan"};
    String[] PasswordArray = {"Davis","Harring","Smith","West"};

    String loginToCheck = "John";
    String passwordToCheck = "Herring";


    boolean loggedIn = false;

    for(int i = 0; i < UsernameArray.length; i++) {
        String currentLogin = UsernameArray[i];
        String currentPass = PasswordArray[i];

        if(currentLogin.equals(loginToCheck) && passwordToCheck.equals(currentPass)) {
            loggedIn = true;
            break;
        }
    }

    System.out.println("Is logged in: " + loggedIn);
}
}

但更好的方法是在单个对象中加入登录名和密码对。喜欢

class LoginData {
    String login;
    String pass;

    LoginData(String login, String pass) {
        this.login = login;
        this.pass = pass;
    }

    String getLogin() {
        return login;
    }

    String getPass() {
        return pass;
    }
}

然后在它们之间循环。