【问题标题】:Email method not working电子邮件方法不起作用
【发布时间】:2012-07-17 11:01:24
【问题描述】:

嘿,我有一个 EmployeeStore,为此我使用了一个 hashmap。地图存储的变量是电子邮件名称和 ID。我有一个名为 SearchByEmail 的方法,但这有一个问题。当用户在 UI 中输入正确的员工电子邮件时,该方法返回 false。

这是我的代码: 这是在 MainApp 中

 case 2:
               System.out.println("Search by Email.");
               Employee employeeSearchEmail = MenuMethods.userInputByEmail();
                 Store.searchByEmail(employeeSearchEmail.getEmployeeEmail());

菜单方法

//Imports
import java.util.Scanner;
//********************************************************************

public class MenuMethods 
{
    private static Scanner keyboard = new Scanner(System.in);



    //Methods for the Company Application menu.
    //Method for validating the choice.
         public static int getMenuChoice(String menuString, int limit, String prompt, String errorMessage) 
         {
                System.out.println(menuString);
                int choice = inputAndValidateInt(1, limit, prompt, errorMessage);
                return choice;
         }
    //********************************************************************
    //This method is used in the getMenuChoice method.
            public static int inputAndValidateInt(int min, int max, String prompt, String errorMessage) 
            {
                int number;
                boolean valid;
                do {
                    System.out.print(prompt);
                    number = keyboard.nextInt();
                    valid = number <= max && number >= min;
                    if (!valid) {
                        System.out.println(errorMessage);
                    }
                } while (!valid);
                return number;
            }
    //********************************************************************
    public static Employee userInput()
    {
         String temp = keyboard.nextLine();
         Employee e = null;
         System.out.println("Please enter the Employee Name:");
         String employeeName = keyboard.nextLine();
         System.out.println("Please enter the Employee ID:");
         int employeeId = keyboard.nextInt();
         temp = keyboard.nextLine();
         System.out.println("Please enter the Employee E-mail address:");
         String employeeEmail  = keyboard.nextLine();
         return e = new Employee(employeeName , employeeId, employeeEmail);

    }
    //********************************************************************
    public static Employee userInputByName()
    {
        //String temp is for some reason needed.  If it is not included
        //The code will not execute properly.
         String temp = keyboard.nextLine();
         Employee e = null;
         System.out.println("Please enter the Employee Name:");
         String employeeName = keyboard.nextLine();

         return e = new Employee(employeeName);

    }
    //********************************************************************
    public static Employee userInputByEmail()
    {
        //String temp is for some reason needed.  If it is not included
        //The code will not execute properly.
         String temp = keyboard.nextLine();
         Employee e = null;
         System.out.println("Please enter the Employee Email:");
         String employeeEmail = keyboard.nextLine();
        //This can use the employeeName's constructor because java accepts the parameters instead
         //of the name's.
         return e = new Employee(employeeEmail);

    }
    //********************************************************************


}

通过电子邮件搜索

public boolean searchByEmail(String employeeEmail) 
    {
            //(for(Employee e : map.values()) {...}) 
            //and check for each employee if his/her email matches the searched value
            boolean employee = map.equals(employeeEmail);    
            System.out.println(employee);
            return employee;

    }

【问题讨论】:

    标签: java search hashmap


    【解决方案1】:

    首先,

    map.equals(employeeEmail);
    

    真的没有意义。 mapHashmapemployeeEmailString。在什么条件下它们会相等?

    不清楚您在地图中存储的内容以及存储方式,因为您既没有包含地图的声明,也没有包含插入新值的代码。我现在假设您存储像name -&gt; Employee 这样的映射。如果您想根据电子邮件地址搜索员工,我建议您执行类似的操作

    Employee findByEmail(String email) {
        for (Employee employee : yourMap.values())
            if (employee.getEmail().equals(email))
                return employee;
    
        // Not found.
        return null;
    }
    

    然后检查是否存在email 的员工,您可以这样做

    public boolean searchByEmail(String employeeEmail) {
        boolean employee = findByEmail(employeeEmail) != null;
        System.out.println(employee);
        return employee;
    }
    

    【讨论】:

      【解决方案2】:

      我假设某些 S、T 的 map 类型为 Map&lt;S,T&gt;,因此它与 employeeEmail 的类型不同,特别是它与 equals() 不同。

      我怀疑您正在寻找Map.containsValue()(如果电子邮件是映射中的值)或Map.containsKey()(如果电子邮件是映射的键),具体取决于map 的映射,如果映射是到/来自字符串值。

      编辑: 基于对 cme​​ts 的澄清:
      由于电子邮件不是map 中的键或值,因此建议的解决方案将无法正常工作。所以你可以选择其中之一:

      1. 使用@aioobe 的解决方案来迭代和检查每封电子邮件。
      2. 向类添加一个额外的字段:Map&lt;String,Employee&gt; map2,它将映射:email_address-&gt;employee。鉴于此地图,您可以使用map2.containsKey(email) 搜索电子邮件。它将确保从电子邮件中更快地查找员工并扩大持有额外地图的范围。如果我是你,我会选择这个。

      【讨论】:

      • 如果您只知道电子邮件地址,Map.containsValue 可能会出现问题。
      • 您假设地图类型是正确的。我也尝试过你的建议,但我不高兴:(输出仍然返回错误。
      • @Pendo826: maptype 到底是什么?它是什么映射?
      • 没有名字是关键。我通过员工类接收电子邮件。
      • @Pendo826:那么这个解决方案将不起作用,您可以使用 aioobe 的建议或添加一个额外的映射 Map&lt;String,Employee&gt; map2,它将从电子邮件地址映射到员工,并使用 map2.containsKey(email)。它将更快地查找员工的电子邮件!
      猜你喜欢
      • 2014-07-05
      • 2012-01-26
      • 2011-05-18
      • 2016-12-14
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      相关资源
      最近更新 更多