0

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

   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”。

到目前为止,如果我输入 John,然后输入第二个人的姓氏“Harring”,我会得到“Success!” 并已登录。我该如何更改此密码,以便个人密码只能是他们自己的姓氏而不是其他任何人的?

4

6 回答 6

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,这将在您每次调用它时创建一个新列表。

于 2013-11-13T17:36:28.837 回答
1

你不需要ArrayLists 来达到这个目的,这是浪费内存,你可以只使用数组。

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

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

需要明确的是: inputUser并且inputPassword是用户输入的用户名和密码

注意:如您所见,我使用小写u和 pusernameArray使用,和:这是因为 java 命名约定,您应该以小写字母开头变量名。passwordArrayLoginPanel.usernameLoginPanel.password

于 2013-11-13T17:36:55.810 回答
0

使用 indexOf:

List<String> usernames = Arrays.asList(UsernameArray);
if (usernames.contains(LoginPanel.Username) &&
    PasswordArray[usernames.indexOf(LoginPanel.Username)].equals(LoginPanel.Password)) {
        // Do something
}
于 2013-11-13T17:37:56.217 回答
0

来自 API 文档

boolean contains(Object o)

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

在您的情况下,UsernameArray包含JohnPasswordArray包含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
}

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

于 2013-11-13T17:40:46.313 回答
0

你可以这样做:

for(int i=0;i< UserNameArray.length; i++){
    if(UserNameArray[i].equals(LoginPanel.Username)&& PasswordArray[i].equals(LoginPanel.Password)){
//do something
}
于 2013-11-13T17:41:15.190 回答
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;
    }
}

然后在它们之间循环。

于 2013-11-13T21:06:51.033 回答