Я работал над проектом, в котором мне нужно написать две карты хешей в файл .dat на Java. Мне нужно иметь возможность добавлять, удалять и изменять хэш-карту employeeMap, а затем записывать его в файл, а также для другого HashMap gradeMap. У меня нет проблем с добавлением, удалением или изменением самих хеш-карт, но я изо всех сил пытаюсь написать код, чтобы иметь возможность записывать объекты в файл и читать объекты из файла. Вот код класса и основной код.
import java.io.Serializable;
//class code
public class Employee implements Comparable<Employee>, Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
private String fname;
private String lname;
private int ID;
/**
* default constructor for the employee class
*/
Employee()
{
setFname("");
setLname("");
setID(0);
}
/**
*
* @param ln last name
* @param fn first name
* @param id ID number
*/
Employee(String ln, String fn, int id)
{
setFname(fn);
setLname(ln);
setID(id);
}
/**
*
* @return first name of the employee
*/
public String getFname() {
return fname;
}
/**
*
* @param fname first name of the employoee
*/
public void setFname(String fname) {
this.fname = fname;
}
/**
*
* @return last name of the employee
*/
public String getLname() {
return lname;
}
/**
*
* @param lname last name of the employee
*/
public void setLname(String lname){
this.lname = lname;
}
/**
*
* @return ID number
*/
public int getID(){
return ID;
}
/**
*
* @param iD id number
*/
public void setID(int iD)
{
this.ID = iD;
}
public boolean equals(Object obj)
{
if(this == obj)
return true;
else if(obj == null)
return false;
else if(obj instanceof Employee)
{
Employee o = (Employee) obj;
return this.fname.equals(o.fname) && this.lname.equals(o.lname) && this.ID == o.ID;
}
else
return false;
}
public int hashCode()
{
final int HASH_MULTIPLIER = 29;
int h = HASH_MULTIPLIER * fname.hashCode() + lname.hashCode();
h = HASH_MULTIPLIER * h + ((Integer) ID).hashCode();
return h;
}
@Override
public int compareTo(Employee e)
{
if(this.lname.compareTo(e.lname) == 0)
{
if(this.fname.compareTo(e.fname) == 0 )
{
if(this.ID > e.ID)
return 1;
else if(this.ID == e.ID)
return 0;
else
return -1;
}
}
return this.lname.compareTo(e.lname);
}
public String toString()
{
return("Last Name: " + lname + "\nFirst Name: " + fname + "\nID: " + ID);
}
}
Основной код
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.io.ObjectOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Main {
private static Scanner in = new Scanner(System.in);
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException
{
Map <Integer,Employee> employeeMap;
Map <Employee, Integer> gradeMap;
File f = new File("Employee.dat");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));
if(f.exists())
{
try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(f)))
{
employeeMap = (HashMap<Integer,Employee>) in.readObject();
gradeMap = (HashMap<Employee,Integer>) in.readObject();
}
catch(Exception e)
{
employeeMap = new HashMap<Integer, Employee>();
gradeMap = new HashMap<Employee, Integer>();
}
}
else
{
employeeMap = new HashMap<Integer, Employee>();
gradeMap = new HashMap<Employee, Integer>();
}
int choice = 0;
do
{
choice = printMenuAndGetChoice();
switch(choice)
{
case 1:
addEmployee(employeeMap, gradeMap);
out.writeObject(gradeMap);
out.close();
break;
case 2:
removeEmployee(employeeMap, gradeMap);
out.writeObject(employeeMap);
out.writeObject(gradeMap);
break;
case 3:
modifyEmployee(employeeMap, gradeMap);
out.writeObject(employeeMap);
out.writeObject(gradeMap);
break;
case 4:
display(gradeMap);
break;
case 5:
break;
default:
break;
}
} while(choice != 5);
}
public static int printMenuAndGetChoice()
{
int choice = 0;
System.out.println("1) Add an employee");
System.out.println("2) Remove an employee");
System.out.println("3) Modify information for an employee");
System.out.println("4) Print employees");
System.out.println("5) Exit");
System.out.println("Choice: ");
choice = in.nextInt();
return choice;
}
public static void addEmployee(Map<Integer, Employee> employeeMap, Map<Employee, Integer> gradeMap)
{
Employee newEmployee = new Employee();
System.out.println("Enter the last name for this employee");
newEmployee.setLname(in.next());
System.out.println("Enter the first name for this employee");
newEmployee.setFname(in.next());
System.out.println("Enter the ID for this employee");
newEmployee.setID(in.nextInt());
System.out.println("Enter the work performance value (1 - 5) for this employee");
int performance = in.nextInt();
int x = 0;
Set<Employee> empList = gradeMap.keySet();
for(Employee e: empList)
if(e.equals(newEmployee))
{
System.out.println("Employee already exists!\n");
break;
}
int hash = newEmployee.getID() * newEmployee.hashCode();
employeeMap.put(hash, newEmployee);
gradeMap.put(newEmployee, performance);
}
public static void removeEmployee(Map<Integer, Employee> employeeMap, Map<Employee, Integer> gradeMap)
{
System.out.println("\nEnter the ID number of the employee to be removed: ");
int id = in.nextInt();
if(!employeeMap.containsKey(id))
System.out.println("The employee does not exist.\n Please enter another ID");
else
{
System.out.println("Employee removed:" + employeeMap.get(id).getFname() + " " + employeeMap.get(id).getLname() + "\n");
gradeMap.remove(employeeMap.get(id));
employeeMap.remove(id);
}
}
public static void modifyEmployee(Map<Integer, Employee> employeeMap, Map<Employee, Integer> gradeMap)
{
Set<Employee> empList = gradeMap.keySet();
System.out.println("\nEnter the ID number of the employee to be removed: ");
int id = in.nextInt();
if(employeeMap.containsKey(id) == false)
System.out.println("The employee does not exist.\n Please enter another ID");
else
{
System.out.println("Enter the work performance value (1 - 5) for this employee");
int performance = in.nextInt();
gradeMap.put(employeeMap.get(id), performance);
}
}
public static void display(Map<Employee, Integer> gradeMap)
{
Set<Employee> empList = gradeMap.keySet();
for(Employee e: empList)
System.out.println(e.toString()+ " " + "\nPerformance: " + gradeMap.get(e) + "\n");
}
}
Я имел в виду мой учебник и онлайн-лекционные заметки, и я не могу понять,вопрос. У кого-нибудь есть идеи, где я могу делать что-то не так (я определенно)? Спасибо за помощь.