Java 比较登录表单的两个数组

Java 比较登录表单的两个数组,java,arrays,Java,Arrays,我目前有两个包含用户名和密码的数组 String[] UsernameArray = {"John","Per","Daniel","Jonathan"}; String[] PasswordArray = {"Davis","Harring","Smith","West"};' 现在我有一个if语句,如下所示: if(Arrays.asList(UsernameArray).contains(LoginPanel.Username)&& Arrays.asList

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

   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
    }
for (int i=0; i<usernameArray.length; i++) {
    if (LoginPanel.username.equals(usernameArray[i]) && LoginPanel.password.equals(passwordArray[i])) {
        //right credentials
    }
}
一切都很好,除了我只想让各自的人使用各自的姓氏作为密码。例如,我希望用户名为“John”,密码仅为“Davis”


现在,如果我输入John,然后输入第二个人的姓氏“Harring”,我会得到“Success!”并登录。如何更改此设置,使人员密码只能是其自己的姓氏,而不能是其他人的姓氏?

您需要确保字符串在各自数组中的索引相同。使用
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
}

您可能需要使用一些局部变量来避免对数组的大量调用。asList,它将在每次调用时创建一个新的列表。

您不需要
ArrayList
用于此目的,这是一种内存浪费,您可以只使用数组


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

if(Arrays.asList(UsernameArray).contains(LoginPanel.Username)&& Arrays.asList(PasswordArray).contains(LoginPanel.Password)) {
                   //Do something
    }
for (int i=0; i<usernameArray.length; i++) {
    if (LoginPanel.username.equals(usernameArray[i]) && LoginPanel.password.equals(passwordArray[i])) {
        //right credentials
    }
}
对于(int i=0;i使用indexOf:

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

来自API文档

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

在您的例子中,
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");
请注意,在真正的web应用程序中,密码将加密存储在某些数据存储中,而不是存储在程序中。

您可以执行以下操作:

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

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

然后在它们之间循环。

在数组上循环并检查给定的用户名是否正确,保存该用户名的索引,并检查该索引处的密码是否与用户输入的密码相同。@应使用反斜杠详细说明(使用一些代码)并编写一个answer@clcto对,做了。