我正在创建一个登录系统,并希望在我的代码中添加三个硬编码的登录详细信息。我目前有一个需要用户名,密码和学号才能登录。当提示在控制台中输入代码时,条目必须与硬编码的详细信息匹配才能获得身份验证。我想再添加三个登录详细信息,总共会有四个。这是我目前的登录系统;
final String UserID = "TomDeponeo";
final String Password = "LJMU";
final int StudentNumber = 22334455;
String EnteredUserID;
String EnteredPassword;
int EnteredStudentNumber;
for (int s = 0; s <= 3; s++) {
if (s < 3) {
System.out.println("Enter your UserID to access lift;");
EnteredUserID = console.nextLine();
System.out.println("Your UserID is >>> " + EnteredUserID);
System.out.println("Enter your password to authenticate login;");
EnteredPassword = console.nextLine();
System.out.println("Password Entered is >>> " + EnteredPassword);
System.out.println("Enter your student number to finalise login and authentication;");
EnteredStudentNumber = console.nextInt();
System.out.println("Student Number Entered is >>> " + EnteredStudentNumber);
if (UserID.equals(EnteredUserID) && (Password.equals(EnteredPassword))
&& (StudentNumber == EnteredStudentNumber)) {
System.out.println("Athentication complete!");
System.out.println("***Elevator access granted!***");
System.out.println("Welcome...");
Elevator a = new Elevator();
Elevator.selectFloor();
break;
} else {
System.out.println("Wrong UserID, Password or Student Number. Please try again.");
}
} else {
System.out.println("3 incorrect enteries detected. Access Denied!");
}
}
}
我目前只有一组登录详细信息,但想添加更多。这是我的意思的一个例子;
final String UserID = "TomDeponeo";
final String Password = "LJMU";
final int StudentNumber = 22334455;
final String UserID2 ="Secondname";
final String Password2 = "Secondpassword";
final String StudentNumber2 = "123456";
//etc...
String EnteredUserID2;
String EnteredPassword2;
int EnteredStudentNumber2;
//etc...
此问题的主要部分涉及将其他可能的登录详细信息添加到登录系统。我是否需要使用||
来允许其他可能的条目?其他细节将在此处添加;
if (UserID.equals(EnteredUserID) && (Password.equals(EnteredPassword))
&& (StudentNumber == EnteredStudentNumber)) {
可能会这样吗?
if (UserID.equals(EnteredUserID) && (Password.equals(EnteredPassword))
&& (StudentNumber == EnteredStudentNumber)) {
|| (UserID2.equals(EnteredUserID2) && (Password2.equals(EnteredPassword2))
&& (StudentNumber2 == EnteredStudentNumber2))
登录时只需要一组可能的4次登录。
答案 0 :(得分:5)
这是为什么在这种情况下需要对象编程的一个很好的例子。
您应该创建一个包含三个字段的类,即
class User {
String userID;
String password;
int studentNumber;
public User(String userID, String pass, int number) {
this.userID = userID;
this.password = pass;
this.studentNumber = number;
}
}
这样您就可以拥有ArrayList<User>
个User
个实例。然后,您可以轻松地遍历此列表以查找任何匹配的凭据。
答案 1 :(得分:1)
我会使用一个很好的对象:
public class Credentials {
private final String name;
private final String password;
private final String studentNumber;
public Credentials(String name, String password, String studentNumber) {
super();
this.name = name;
this.password = password;
this.studentNumber = studentNumber;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (getClass() != obj.getClass())
return false;
Credentials other = (Credentials) obj;
if (!this.name.equals(other.name)) {
return false;
}
if (!this.password.equals(other.password)) {
return false;
}
if (!this.studentNumber.equals(other.studentNumber)) {
return false;
}
return true;
}
}
在你的测试班中:
private static final Credentials[] cred = {
new Credentials("TomDeponeo", "LJMU", "22334455"),
new Credentials("Secondname", "Secondpassword", "123456"),
/* ... */
};
然后测试输入的凭据:
public static boolean checkForCredentials(String EnteredUserID, String EnteredPassword, String EnteredStudentNumber) {
Credentials entered = new Credentials(EnteredUserID, EnteredPassword, EnteredStudentNumber);
for (Credentials creds : validCredentials) {
if (creds.equals(entered)) {
return true;
}
}
return false;
}
使用此功能,您可以获得未定义数量的硬编码凭据,而无需触及逻辑。请注意,我已覆盖equals
但未覆盖hashCode
。例如,在现实世界中,您始终要覆盖hashCode
和equals
或不覆盖。
答案 2 :(得分:-1)
你很亲密。这是您正在寻找的正确布尔逻辑:
if ((UserID.equals(EnteredUserID) && Password.equals(EnteredPassword) && StudentNumber == EnteredStudentNumber)
|| (UserID2.equals(EnteredUserID2) && Password2.equals(EnteredPassword2) && StudentNumber2.Equals(EnteredStudentNumber2)))
注意,EnteredStudentNumber2变量是一个字符串,因此您必须使用.Equals()。
第一个EnteredStudentNumber是一个整数,因此您可以使用== comparison。
答案 3 :(得分:-1)
正如其他人所说,可以使用或运算符(||
)
您可能希望将所有字段的支票分组,然后围绕它们进行分组,或者进行其他检查
if ((UserID.equals(EnteredUserID) && (Password.equals(EnteredPassword)) && (StudentNumber == EnteredStudentNumber))
|| (UserID2.equals(EnteredUserID) && (Password2.equals(EnteredPassword)) && (StudentNumber2 == EnteredStudentNumber))
[...]
)
然而,这可能不是一个好主意,因为它非常容易出错(您可能会意外地检查一个应该检查StudentNumber43的块中的StudentNumber4,因此您应该使用某种可重复数据结构。这可能是多个List<String>
,多个字符串数组String[]
或封装UserInformation(List<User>
或User[]
)的对象列表