0

I added two of my classes. my question is, after i added new engineers to the ArrayList, how can choose a specific Engineer and "edit" his ID or Salary (through the "menu" using Scanner)? then how can i remove a specific Engineer from the ArrayList? hope somebody can understand my code in order to help. thanks.

    package logic;

    import java.util.ArrayList;
    import java.util.Scanner;

    public class EmployeeList {

    ArrayList<Employee> Emp = new ArrayList<Employee>();


    public void startMenu() {
        StartLogo();

        Scanner s = new Scanner(System.in);

        boolean flag = true;
        int k;
        while (flag) {
            printMenuInstructions();
            k = s.nextInt();

            switch (k) {
            case 1:
                addWorkerMenu();
                break;
            case 2:
                removeWorkerMenu();
                break;
            case 3:
                editWorkerMenu();
                break;
            case 4:
                printGetdetails();
                break;
            case 5:
                printSalary();
                break;
            case 6:
                System.out.println("Bye Bye");
                flag = false;
                break;

            default:
                System.out.println("Invalid key please re enter");
                break;
            }
        }
    }

    public void printSalary() {
        for (int i = 0; i < Emp.size(); i++) {
            if (Emp != null)
                Emp.get(i).printSalary();
            System.out.println();
        }
    }

    public void printGetdetails() {
        for (int i = 0; i < Emp.size(); i++) {
            if (Emp != null)
                Emp.get(i).printDetails();
            System.out.println();
        }
    }

    private void printMenuInstructions() {
        System.out.println("Enter a number 1-4 ");
        System.out.println("1. Add Employee");
        System.out.println("2. Remove Employee");
        System.out.println("3. Edit Employee details");
        System.out.println("4. Employee Report");
        System.out.println("5. Salery Report");
        System.out.println("6. Exit");
    }

    private void printMenuAddWorkerInstructions() {
        System.out.println("Enter a number 1-4 ");
        System.out.println("1. Add Engineer");
        System.out.println("2. Add Manager");
        System.out.println("3. Add Secretary");
        System.out.println("4. Add Cleaner");
        System.out.println("5. return");
    }
    private void printMenuEditWorkerInstructions() {
        System.out.println("Enter a number 1-4 ");
        System.out.println("1. Edit Engineer");
        System.out.println("2. Edit Manager");
        System.out.println("3. Edit Secretary");
        System.out.println("4. Edit Cleaner");
        System.out.println("5. return");
    }

    private void addWorkerMenu() {
        Scanner s = new Scanner(System.in);

        boolean flag = true;
        int k;
        while (flag) {
            printMenuAddWorkerInstructions();
            k = s.nextInt();

            switch (k) {
            case 1:
                Emp.add(new Engineer());
                Emp.get(index).addmenu();
                index++;
                break;
            case 2:
                Emp.add(new Manager());
                Emp.get(index).addmenu();
                index++;
                break;
            case 3:
                Emp.add(new Secretary());
                Emp.get(index).addmenu();
                index++;
                break;
            case 4:
                Emp.add(new Cleaner());
                Emp.get(index).addmenu();
                index++;
                break;
            case 5:
                flag = false;
                break;
            default:
                System.out.println("Invalid key please re enter");
                break;
            }
        }

    }

    private void removeWorkerMenu() {
        Scanner d = new Scanner(System.in);

        boolean flag = true;
        int k;
        while (flag) {
            printMenuReomoveWorkerInstructions();
            k = d.nextInt();

            switch (k) {
            case 1:

                Scanner e = new Scanner(System.in);
                int l;
                while (flag) {
                    printMenuReomoveEngineerInstructions();
                    l = e.nextInt();
                    switch (l) {
                    case 1:
                        // try{
                        Emp.remove(new Engineer());
                        Emp.remove(0);
                        // }catch (ArrayIndexOutOfBoundsException y){
                        // Emp.isEmpty();
                        // System.err.println("array out of bound " +
                        // y.getMessage());
                        //
                        // }
                        // break;
                        // case 2:
                        // Emp.remove(new Engineer());
                        // Emp.remove(1);
                        // break;
                        // case 3:
                        // Emp.remove(new Engineer());
                        // Emp.remove(2);
                        // break;
                        //
                        // default:
                        // break;
                        // }
                        System.out.println("Engineer was removed        succesfully");
                        break;
                    }
                }
            case 2:
                Emp.remove(new Manager());
                Emp.remove(0);
                System.out.println("Manager was removed succesfully");
                break;
            case 3:
                Emp.remove(new Secretary());
                Emp.remove(0);
                System.out.println("secratary was removed succesfully");
                break;
            case 4:
                Emp.remove(new Cleaner());
                Emp.remove(0);
                System.out.println("Cleaner was removed succesfully");
                break;
            case 5:
                flag = false;
                break;
            default:
                System.out.println("Invalid key please re enter");
                break;
            }
        }
    }

    private void editWorkerMenu() {
        Scanner f = new Scanner(System.in);

        boolean flag = true;
        int m;
        while (flag) {
            printMenuEditWorkerInstructions();
            m = f.nextInt();

            switch (m) {
            case 1:

                Emp.set(0, new Engineer());
                addWorkerMenu();
                System.out.println("Engineer was edited succesfully");
                break;

            case 2:
                Emp.set(0, new Manager());
                addWorkerMenu();
                System.out.println("Manager was edited succesfully");
                break;
            case 3:
                Emp.set(0,new Secretary());
                addWorkerMenu();
                System.out.println("secratary was edited succesfully");
                break;
            case 4:
                Emp.set(0,new Cleaner());
                addWorkerMenu();
                System.out.println("Cleaner was edited succesfully");
                break;
            case 5:
                flag = false;
                break;
            default:
                System.out.println("Invalid key please re enter");
                break;
            }
        }

    }

    private void printMenuReomoveEngineerInstructions() {
        System.out.println("which engineer would you like to remove?");
        System.out.println("for the first engineer please press 1");
        System.out.println("for the second engineer please press 2");
        System.out.println("for the third engineer please press 3");

    }

    private void printMenuReomoveWorkerInstructions() {
        System.out.println("Enter a number 1-4 ");
        System.out.println("1. Remove Engineer");
        System.out.println("2. Remove Manager");
        System.out.println("3. Remove Secretary");
        System.out.println("4. Remove Cleaner");
        System.out.println("5. return");
    }

    final static void StartLogo() {
        System.err.println("welcome to daniel corporation");
        System.err.println("***         ***");
        System.err.println("  **       **");
        System.err.println("   ***   ***");
        System.err.println("     ** **");
        System.err.println("      ***");
        System.err.println();
    }

}


And class Engineer is: 

package logic;

import java.util.Scanner;

public class Engineer extends Employee {

    private float Bonus;

    public Engineer() {

    }

    public Engineer(String name, int age, int id, int year, float salary,
            float bonus) {
        super(name, year, year, year, bonus);
        Bonus = bonus;
    }

    public float getBonus() {
        return Bonus;
    }

    public void setBonus(float bonus) {
        Bonus = bonus;
    }

    public void printDetails() {
        String details = " Name is:  " + getName() + "," + " the age is:  "
                + getAge() + " the id is:  " + getId() + ","
                + " the year is:  " + getYear()
                + " the salary in ILS is:  " + super.getSalary() + ","
                + " vacation days left :  " + getBonus();
        System.out.println(details);
    }


    public void addmenu() {
        //TODO
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter Engineer name ");
        String strName = scanner.next();
        try {
            String Name = String.valueOf(strName);
            setName(Name);
        } catch (Exception e) {
            System.err.println("not a number " + e.getMessage());
        }
//      super.setName(scanner.next());
        System.out.println("Enter Engineer Age");
        String strAge = scanner.next();
        try {
            int age = Integer.valueOf(strAge);
//          TODO if (strAge.) ){
//              
//          }
            setAge(age);
        } catch (Exception e) {
            System.err.println("not a number " + e.getMessage());
        }

        // super.setAge(scanner.nextInt());

        System.out.println("Enter Engineer ID number");
        String strId = scanner.next();
        try {
            int Id = Integer.valueOf(strId);
            setId(Id);
        } catch (Exception e) {
            System.err.println("not a number " + e.getMessage());
        }
        //super.setId(scanner.nextInt());
        System.out.println("Enter Engineer year of Start");
        String strYear = scanner.next();
        try {
            int Year = Integer.valueOf(strYear);
            setYear(Year);
        } catch (Exception e) {
            System.err.println("not a number " + e.getMessage());
        }
        //super.setYear(scanner.nextInt());
        System.out.println("Enter Engineer salary in dollars ");
        String strSalary = scanner.next();
        try {
            float Salary = Float.valueOf(strSalary);
            setSalary(Salary);
        } catch (Exception e) {
            System.err.println("not a number " + e.getMessage());

        }       System.out.println("Enter Engineer bonus ");
        String strBonus = scanner.next();
        try {
            float Salary = Float.valueOf(strBonus);
            setSalary(Salary);
        } catch (Exception e) {
            System.err.println("not a number " + e.getMessage());

        System.out.println("Engineer Entered successfuly ");
        }

    }

    @Override
    public void printSalary() {
        System.out.println("Salary of " + super.getName() + " is "
                + super.getSalary());

    }

    @Override
    public void editDetails() {


    }

}
Matt
  • 3,508
  • 6
  • 38
  • 66
Dgotlieb
  • 1,393
  • 2
  • 9
  • 15
  • As a side note, you **should not** use `float` for money quantities, http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency –  Aug 08 '15 at 07:36

3 Answers3

1

It's easier to use a java.util.Map (key: ID, value = Employee object):

Map<Integer, Employee> theMap = new HashMap<>();
theMap.put(someId, new Engineer("Bob The Builder", 21, someId, 1911, 100000.0, 20.0)); // add
theMap.get(someId); // get
theMap.remove(someId); // remove

With a List, you have to iterate check ID then remove, but you can't remove from a list you are iterating on (so create a copy or use the list iterator):

// with a copy
List<Employee> remainingEmps = new ArrayList<>();
for (Employee e : Emps) {
    if (!e.getId().equals(someId)) { // assumes no employee with null ID
        remainingEmps.add(e);
    }
}
Emps = remainingEmps;
0

You can choose a specific engineer in the following ways:
1. By index:

Engineer engineer = Emp.get(i);//i is the index of the element to be removed.

2. By specific engineer id:

for(Engineer engineer : Emp)
{
    if(engineer.getId() == (<specific id>) //provided Employee class has a getter method for id.
    {
        engineer.setId(<new id>);
    }
}

Similarly for removing from the list, there are the following ways:
1. By index:

Emp.remove(i);//i is the index of the element to be removed.
Sourabh
  • 545
  • 5
  • 12
0

You should use HashMap insted Of ArrayList Like

Use

HashMap<Integer,Employee> mapEmployeeList = new HashMap<Integer,Employeer>();

Instead Of

ArrayList<Employee> Emp = new ArrayList<Employee>();
Kiran Choudhary
  • 1,125
  • 7
  • 15