[英]Comparing two arrays for login form
我目前有两个包含用户名和密码的数组。
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”。
截至目前,如果我进入约翰,然后输入第二个人的姓氏“哈林”,我得到“成功!” 并登录。 我如何改变这一点,以便人员密码只能是他们自己的姓氏,而不是其他人的姓名?
您需要确保字符串在各自的数组中处于相同的索引处。 使用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
如此多的调用,每次调用它时都会创建一个新列表。
您不需要ArrayList
用于此目的,这是浪费内存,您可以只使用数组。
循环遍历数组并检查给定的用户名是否正确,保存该用户名的索引并检查该索引处的密码是否与用户输入的密码相同。 像这样的东西:
for (int i=0; i<usernameArray.length; i++) {
if (LoginPanel.username.equals(usernameArray[i]) && LoginPanel.password.equals(passwordArray[i])) {
//right credentials
}
}
需要说明的是: inputUser
和inputPassword
是用户输入的用户名和密码
注意:正如您所看到的,我使用了usernameArray
, passwordArray
, LoginPanel.username
和带有小写u和p的 LoginPanel.password
:这是因为java命名约定,您应该使用小写字母启动变量名。
使用indexOf:
List<String> usernames = Arrays.asList(UsernameArray);
if (usernames.contains(LoginPanel.Username) &&
PasswordArray[usernames.indexOf(LoginPanel.Username)].equals(LoginPanel.Password)) {
// Do something
}
来自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
}
请注意,在真实的Web应用程序中,密码将加密存储在某些数据存储中而不是程序中。
你可以这样做:
for(int i=0;i< UserNameArray.length; i++){
if(UserNameArray[i].equals(LoginPanel.Username)&& PasswordArray[i].equals(LoginPanel.Password)){
//do something
}
简单的方法就是这样
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;
}
}
然后在它们之间循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.