我正在尝试使用Map来编写一个程序,以便根据员工的爱好来映射员工的详细信息。该程序应将员工及其业余爱好的详细信息作为输入,然后将其作为键/值对存储在地图中。一旦添加了详细信息,用户就应该能够列出所有员工及其爱好,并且还应该能够查看特定员工(通过提供员工ID作为输入),详细信息和他/她的爱好。此外,用户应该能够根据员工的ID删除员工。
我试过如下。但方法'deleteEmployee()','isEmployeePresent()'和'displayEmployees()'是错误的
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
class Employee {
String designation, name;
Date dob;
int employeeID;
float salary;
public Employee(String designation, Date dob, int employeeID, String name,
float salary) {
this.designation = designation;
this.dob = dob;
this.employeeID = employeeID;
this.name = name;
this.salary = salary;
}
public String getDesignation() {
return designation;
}
public Date getDob() {
return dob;
}
public int getEmployeeID() {
return employeeID;
}
public String getName() {
return name;
}
public float getSalary() {
return salary;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public void setDob(Date dob) {
this.dob = dob;
}
public void setEmployeeID(int employeeID) {
this.employeeID = employeeID;
}
public void setName(String name) {
this.name = name;
}
public void setSalary(float salary) {
this.salary = salary;
}
}
class Hobby {
String hobbyDescription, hobbyName;
public Hobby(String hobbyName, String hobbyDescription) {
this.hobbyName = hobbyName;
this.hobbyDescription = hobbyDescription;
}
public String getHobbyName() {
return hobbyName;
}
public String getHobbyDescription() {
return hobbyDescription;
}
public void setHobbyName() {
this.hobbyName = hobbyName;
}
public void setHobbyDescription() {
this.hobbyDescription = hobbyDescription;
}
}
public class EmployeeManagement {
public static void main(String args[]) {
HashMap<Employee, Hobby> hm1 = new HashMap<Employee, Hobby>();
Scanner sc1 = new Scanner(System.in);
System.out.println("How many names do you want to add to the system? ");
int w = sc1.nextInt();
EmployeeManagement ob = new EmployeeManagement();
ob.addEmployees(w, hm1);
ob.displayEmployees(hm1);
while (true) {
System.out.println("1. Delete an employee");
System.out
.println("2. Check whether an employee is present or not");
System.out.println("3. Break the loop and terminates the program");
int ch = sc1.nextInt();
switch (ch) {
case 1:
System.out.println("Enter Employee-I'd:");
int p = sc1.nextInt();
ob.deleteEmployee(p, hm1);
ob.displayEmployees(hm1);
break;
case 2:
System.out.println("Enter Employee-I'd:");
int q = sc1.nextInt();
boolean b = ob.isEmployeePresent(q, hm1);
if (b == true)
System.out.println("The employee is present");
else
System.out.println("The employee is not present");
break;
case 3:
return;
}
}
}
public void addEmployees(int n, Map<Employee, Hobby> abc) {
Scanner sc = new Scanner(System.in);
Employee[] obj1 = new Employee[n];
Hobby[] obj2 = new Hobby[n];
for (int i = 0; i < n; i++) {
System.out.println("Enter Employee name:");
String nm = sc.next();
System.out.println("Enter designation:");
String des = sc.next();
System.out.println("Enter employeeI-D:");
int eId = sc.nextInt();
System.out.println("Enter salary:");
double sl1 = sc.nextDouble();
float sl = (float) sl1;
System.out.println("Enter Hobby-name:");
String hnm = sc.next();
System.out.println("Enter Hobby-description");
String hdes = sc.next();
System.out.println("Enter date-of-birth:");
String dt1 = sc.next();
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
try {
Date dt = formatter.parse(dt1);
obj1[i] = new Employee(des, dt, eId, nm, sl);
obj2[i] = new Hobby(hnm, hdes);
} catch (ParseException e) {
e.printStackTrace();
}
abc.put(obj1[i], obj2[i]);
}
}
public void deleteEmployee(int id, Map<Employee, Hobby> m1) {
if (m1.containsKey((Employee.getEmployeeID()) == id))
m1.remove(Employee);
}
public boolean isEmployeePresent(int id, Map<Employee, Hobby> m2) {
if (m2.containsKey((Employee.getEmployeeID()) == id))
return true;
else
return false;
}
public void displayEmployees(Map<Employee, Hobby> hm) {
for (Map.Entry<Employee, Hobby> m : hm.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
答案 0 :(得分:0)
您正试图以静态方式访问Employee
方法:
if(m1.containsKey((Employee.getEmployeeID())==id))
// ↑ here
您必须在地图中获取Employee
的实例,然后与给定的ID进行比较:
public void deleteEmployee(int id,Map<Employee,Hobby> m1) {
// iterate in the map searching for the id
for (Entry<Employee, Hobby> entry : map.entrySet()) {
Employee e = entry.getKey(); // here you have the employee
Hobby h = entry.getValue(); // here you have the hobby
// check if this employee have same id than given
if(e.getEmployeeID() == id) { // map contains the employee
m1.remove(e);
}
}
注意:
我建议您返回一个布尔值来检查员工是否已更新,删除等...... public boolean deleteEmployee(int id,Map<Employee,Hobby> m1)
我会以另一种方式保留员工,HashMap
不允许重复,因此如果您不将Hobby
声明为HashMap<Employee, List<Hobby>>
,则不能在每个员工中保存<script>myproject.somepage.init();</script>
1}}。