Java for循环使用if语句只迭代一次

时间:2015-03-03 20:56:34

标签: java for-loop linked-list

我有一个我希望制作的员工系统登录版本,我有一个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语句之后我想检查用户输入的代码是否也正确。

2 个答案:

答案 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()方法的作用,我只是简单地将其添加到代码中。此解决方案迭代三次以尝试获取正确的密码。如果失败,则会显示一条消息。