我有一个我希望制作的员工系统登录版本,我有一个for循环,它应该遍历整个帐户列表,然后查看员工的姓名是否与列表中的一个匹配,然后是如果声明继续,进一步的问题等...它似乎只迭代一次然后停止,因为它只会找到第一个用户并告诉我其他帐户不存在,即使他们这样做!我究竟做错了什么?此外,我的列表包含从Account继承的Employees和Managers,if语句使用Account中的getName来比较它是否等于用户输入。对不起,如果这是可笑的愚蠢/坏!感谢。
List <Account> Accounts = new LinkedList<Account>();
这是我填充我的帐户的地方,main方法调用它并且list()被调用whihc包含有问题的循环
public void add() {
Employee Geoff = new Employee("Geoff", "password1");
Manager Bob = new Manager("Bob", "password2");
Employee John = new Employee("John", "password3");
Accounts.add(Geoff);
Accounts.add(Bob);
Accounts.add(John);
list();
}
问题:
System.out.println("Hello welcome: ");
System.out.println("Please enter your name: ");
String empName = Scan.nextLine();
for (Account a : Accounts) {
System.out.println(a);
if (a.getname().equals(empName)) {
System.out.println("\nPlease enter your passcode: ");
String code = Scan.nextLine();
if (a.check(code) == true) {
System.out.println("logged in");
}
}
System.out.println("Employee does not exist!");
login();
}
我在for循环中执行print语句以查看它是什么,并且不幸的是它只是第一个帐户
编辑:我在这里添加了更多代码,我的初始if语句之后我想检查用户输入的代码是否也正确。
答案 0 :(得分:1)
查看员工的姓名是否与列表中的名称匹配,然后查看if 声明继续,进一步的问题等......似乎只是 迭代一次,然后停止,因为它只会找到第一个用户和 告诉我其他帐户不存在,即使他们这样做!!
如果它适用于一个员工并且告诉其他人不存在,那么你的for循环不迭代一次。
您获得的输出正是代码的样子。您获得用户名一次,然后尝试将相同的名称与列表中的每个员工匹配。如果名称相同,则要求输入密码,否则打印出该员工不存在。一切正确,因为它在代码中。您应该在问题中添加预期的行为,以便我或其他人可以修改您的代码,而无需猜测您的方法的目的。
以下是其中一个猜测:
System.out.println("Please enter your name: ");
String empName = Scan.nextLine();
boolean userFound = false;
for (Account a : Accounts) {
System.out.println(a);
if (a.getname().equals(empName)) {
System.out.println("\nPlease enter your passcode: ");
String code = Scan.nextLine();
if (a.check(code) == true) {
System.out.println("logged in");
userFound = true;
break;
}
}
}
if(userFound) {
login();
} else {
System.out.println("User not found.");
}
答案 1 :(得分:0)
这是一个可能的解决方案,它不使用你的Account
类(因为我不知道它是什么样的)而是使用了Map:
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Hello welcome: ");
System.out.println("Please enter your name: ");
String empName = input.nextLine();
boolean found = false;
Map<String, String> accounts = new HashMap<String, String>();
accounts.put("Geoff", "password1");
accounts.put("Bob", "password2");
accounts.put("John", "password3");
Set<String> names = accounts.keySet();
for (String a : names)
{
if (!a.equals(empName))
{
continue;
}
found = true;
// three tries to login
boolean success = false;
for(int i = 0; i < 3; i++)
{
System.out.println("Please enter your passcode: ");
String code = input.nextLine();
if (accounts.get(a).equals(code))
{
System.out.println("logged in");
success = true;
}
else
{
System.out.println("Wrong password... try again");
}
}
if(!success)
{
System.out.println("User failed to authenticate after 3 attempts. User has been locked out!");
}
}
if(!found)
{
System.out.println("Employee does not exist!");
}
}
由于我不知道login()
方法的作用,我只是简单地将其添加到代码中。此解决方案迭代三次以尝试获取正确的密码。如果失败,则会显示一条消息。