java - 删除方法不删除EmployeeStore的员工

标签 java hashmap

我的删除方法似乎不起作用,因为当用户尝试输入员工姓名时应用程序无法删除员工。应该发生的情况如下:

  1. 用户使用我编写的名为 userInputByName 的方法输入员工的姓名。
  2. 应用程序会在商店中搜索该员工。
  3. 该员工已被删除。

当我打印出员工仍然在那里的商店时,步骤 3 不起作用。

我现在将向您展示我的代码。

MainApp()

//---------------------------------------------------------------------------------------
//  Name:        Case 3: Delete by Name.
//  Description: Choice 3 gives the user an option to delete an employee by name.
//---------------------------------------------------------------------------------------
            case 3:
                System.out.println("Delete by Name.");
                Employee employeeDelete = MenuMethods.userInputByName();
                Store.searchByName(employeeDelete.getEmployeeName());
                System.out.println("Your choice is: "+ employeeDelete);
                Store.remove(employeeDelete);
                break;

员工

//---------------------------------------------------------------------------------------
//  Employee class.
//---------------------------------------------------------------------------------------
public class Employee
{
//---------------------------------------------------------------------------------------
//  Variables to be used in the employee store.
//---------------------------------------------------------------------------------------
    private String employeeName;
    private int employeeId;
    private String employeeEmail;
//---------------------------------------------------------------------------------------
//  Name:        Constructors.
//  Description:
//---------------------------------------------------------------------------------------
    public Employee(String employeeName, int employeeId, String employeeEmail) 
    {
        this.employeeName = employeeName;
        this.employeeId = employeeId;
        this.employeeEmail = employeeEmail;
    }
//---------------------------------------------------------------------------------------
//  Overloading the constructor for the use with userInputByName method.
//---------------------------------------------------------------------------------------
    public Employee(String employeeName) 
    {
        this.employeeName = employeeName;
    }
//---------------------------------------------------------------------------------------
//  Name:   Getters.
//---------------------------------------------------------------------------------------
    public String getEmployeeEmail() 
    {
        return employeeEmail;
    }

    public String getEmployeeName() 
    {
        return employeeName;
    }
    public int getEmployeeId() 
    {
        return employeeId;
    }
//---------------------------------------------------------------------------------------
//  Name:   Setters.
//---------------------------------------------------------------------------------------
    public void setEmployeeEmail(String employeeEmail) 
    {
        this.employeeEmail = employeeEmail;
    }
    public void setEmployeeName(String employeeName) 
    {
        this.employeeName = employeeName;
    }
    public void setEmployeeId(int employeeId)
    {
        this.employeeId = employeeId;
    }

//---------------------------------------------------------------------------------------
//  Name:   toString.
//---------------------------------------------------------------------------------------
    public String toString() 
    {
        return "\t\t\tEmployee\n" +
                "********************************************************************\n"+
                "Employee Name: "+ employeeName +"\n"+ 
                "Employee Id: " + employeeId +"\n"+  
                "Employee Email: " + employeeEmail;
    }
//---------------------------------------------------------------------------------------
}

删除方法

public Employee remove(Employee key) {
        // Remove the Employee by name.
        if (map.containsKey(key))
            return map.remove(key); // if it is there remove and return.
        else
            return null; // if its not there return nothing.
    }

HashMap 声明

HashMap<String, Employee> map;
    private static Scanner keyboard = new Scanner(System.in);

    public EmployeeStore() {
        map = new HashMap<String, Employee

按名称搜索

// ---------------------------------------------------------------------------------------
    // Name: Search by Name.
    // //---------------------------------------------------------------------------------------
    public Employee searchByName(String employeeName) {
        Employee employee = map.get(employeeName);
        System.out.println(employee);
        return employee;
    }

用户输入

//---------------------------------------------------------------------------------------
//  Name:        userInputByName.
//  Description: This method is used in the MainApp to give the user capability to search by name.
//---------------------------------------------------------------------------------------
    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);

    }

添加到 HashMap

//---------------------------------------------------------------------------------------
//   Create a Store named Store and add Employee's to the Store.
//---------------------------------------------------------------------------------------
        EmployeeStore Store = new EmployeeStore();
        Store.add(new Employee("James O' Carroll", 18, "hotmail.com"));

        Store.add(new Employee("Andy Carroll", 1171, "yahoo.com"));

        Store.add(new Employee("Luis Suarez", 7, "gmail.com"));

最佳答案

您的Hashmap声明为HashMap<String, Employee> map .

如果你想从中删除某些内容,那么你需要传入 String ,不是Employee 。尝试这样的事情:

public Employee remove(String key) 
{
    return map.remove(key);
}

无需检查 HashMap 是否删除之前包含 key 。该方法将返回 null为你。

编辑:我很惊讶这没有为您引发编译时错误。

编辑2:好的。所以你正在创建你的Employee对象,然后将其传递到您的 add()方法。没关系,但你需要有你的add()方法匹配 remove()你制定的方法。所以如果你正在做 EmployeeStore.remove(<employee.getEmployeeName())那么你应该让你的 add()方法如下:

public Employee add(Employee input)
{
    return map.put(input.getEmployeeName(), input);
}

该函数返回 Employee对象,如果之前有一个存储在 Key 下,但您可以选择忽略该值。拥有您的add()像这样的方法应该使它匹配你的 remove()方法。由于您有员工 ID 号,您甚至可以更改 Key到该整数,因为它可能比名称更独特。

关于java - 删除方法不删除EmployeeStore的员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651854/

相关文章:

java - 捕获异常时无限循环

java - 如何配置log4j 2's additivity to respect parent' s级别?

java - 替换每个键包含多个值的 Hashmap 中的值

java - 将元素添加到 HashMap 中的 HashSet

ruby - Ruby 中的 "append-only"/"write-only"散列

java - Spring Security 的域权限

java - 如何在 Spring 中使用正则表达式集合过滤 bean 集合?

java - 从 Java 中的 HashMap 中删除值的子集

struts2 - 从 Struts2 中的 hashmap 获取变量值

java - 如何反转位移位方法