我想通过用户输入添加到arrayList中



我一直在尝试创建一个小程序,提示用户输入一个员工姓名和工资,将其添加到arrayList中,然后在屏幕上显示选项(例如0:quit、1:add、2:display(,读取输入,然后根据输入进行操作。展示只需要(例如,姓:史密斯,工资:14000英镑。只是需要一些帮助来指引我正确的方向。我目前有三个类:员工、员工列表和员工测试。

此类提示用户输入。

import java.util.Scanner;
public class Employee {
private String Last_Name;
private int Salary;
public Employee(){
    Scanner inputValues = new Scanner(System.in);
    System.out.print("Enter employee last name: ");
    Last_Name = inputValues.next();
    System.out.print("Enter Employee Salary: " + "£");
    Salary = inputValues.nextInt();
}
public void Display(){
    System.out.printf("Name: " + Last_Name + " " + "Salary: " + Salary);
    System.out.println("n");
}
}

这个类应该将雇员添加到数组列表中,但我不确定我做得是否正确。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class EmployeeList extends Employee{
private List <Employee> employee =  new ArrayList<Employee>();

 public EmployeeList(Employee person) {
     employee.add(person);
}
 public void DisplayEmployees(){
     System.out.println("Employee:"  + employee.size()); 
     displayList(employee);
 }
 public static void displayList(List employee) {
      } 
}

这就是的主要方法

import java.util.Scanner;
public class EmployeeTest {

public static void main(String[] args) {
    Employee employee = new Employee();
    employee.Display();
    EmployeeList empList =  new EmployeeList(employee);
    empList.DisplayEmployees();
    Scanner scanner = new Scanner(System.in); 
    System.out.println("0: quit, 1: add, 2: display");
    String employees = scanner.next(); 
   /* if (employees.equals("1")){
     //not sure how to go back to displaying the user prompts
        break;
    } */
}
}

我能想到的几个技巧:

  1. EmployeeList不应扩展Employee。OOP的主要规则是,如果BA,则类A扩展类B。这里显然不是这样——employeeList不是雇员,而是雇员列表(在我看来,你不需要类,只需要List<Employee>(
  2. 我会把逻辑和数据分开。意思是Employee类应该只保存员工的数据,而不处理扫描和从用户那里获得输入。在我看来,构造函数应该很简单,比如:

    public Employee(String name, int salary) {
     this.name = name;
     this.salary = salary;
    }
    

    获取数据的逻辑应该在这个类之外,要么在EmployeeHandler中,要么在main本身中。既然你把它放在员工内部,那么当一些逻辑在员工内部和一些主要逻辑中时,你就很难继续下去。

  3. 高级代码应该是这样的(我将把细节留给您(:
    • 向用户显示菜单选项
    • 如果他想添加用户,请获取两个变量的输入,创建employee对象并将其添加到列表中
    • 如果他想显示,请浏览列表并打印(打印可以在Employee类中覆盖toString完成(
    • 如果他想退出,就结束
    • 继续这个循环直到他想退出
public class Employee {
    private String Last_Name;
    private int Salary;
    public Employee(){
      public String getLName(){
           return Last_Name;
      }
       public void setLName(){
           this.Last_Name = Last_Name;
      }
       public int getSalary(){
           return salary;
      }
       public void setSalary(){
           this.salary = salary;
      }
   }
}

然后在您的主方法中,您可以创建employee对象。

public static void main(String[] args){
    Employee employee = new Employee();
    Scanner scanner = new Scanner(System.in); 
    employee.setLName = scanner.next();
    employee.setSalary = scanner.nextInt();
}

如果我是你的话,我会列一个名单来关押所有员工。我会提示输入选项x次,然后添加到数组列表的末尾。数组列表将按创建

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

要添加到其中,请使用添加

employeeList.add(employee);

这应该能够让你开始

编辑:

OOPS,犯了几个错误。使用以下内容进行编辑。请注意,它是employee.setLastName(value(,因为方法setLastName是employer类的一部分,并且必须向它传递一个值,因为我们在employee类中已经定义了该值。

    Employee employee = new Employee();
    Scanner scanner = new Scanner(System.in); 
    String tempName = scanner.next();
    int tempSalary = scanner.nextInt();
    employee.setLastName(tempName);
    employee.setSalary(tempSalary); 

编辑2:

尝试按如下方式打印数组列表。没有测试。让我知道它是如何工作的。

 for (int i = 0; i< employeelist.size(); i++){
         Employee temp = values.get(i);
         System.out.println("Last Name: " + temp.getLname() + "Salary: " + temp.getSalary());
 }

我修改了我的员工类,使其看起来像这样:

public class Employee {
public String lastName;
private int salary;
public Employee(){
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public int getSalary() {
    return salary;
}
public void setSalary(int salary) {
    this.salary = salary;
}
@Override
public String toString(){
    return "Employee Last Name: " + lastName + "n" + "Employee Salary: " + salary;
}
}

我修改了我的EmployeeTest类:

这是我的EmployeeTest类:

import java.util.ArrayList;
import java.util.Scanner;
public class EmployeeTest {
static ArrayList<Employee> employeeList = new ArrayList<Employee>();
public static void main(String[] args) {
    for(int i=0;i<5;i++){
        addEmployees(employeeList); 
    } 
   System.out.println(employeeList.toArray());
}
public static void addEmployees(ArrayList<Employee> employeeList){
    Scanner scanner = new Scanner(System.in); 
    System.out.println("0: quit, 1: add, 2: display");
    String options =  scanner.next();
    if(options.equals("1")){
    System.out.print("Enter employee last name: ");
    String lastname = scanner.next();
    System.out.print("Enter Employee Salary: " + "£");
    int salary = scanner.nextInt();
    Employee employee = new Employee();
    EmployeeList.add(employee);
    }
    else if(options.equals("2")){
        for (Employee employee : employeeList){
        /*System.out.println("Name: " + employee.getLastName() +  ", " + "Salary: " + employee.getSalary());*/
            System.out.println(employee);
        }
    }
    else{
        System.exit(0);
    }


}

}

然而,当我按2作为选项时,它不会显示我的数组列表中的内容。

我读到过一个toString方法用于获取这些细节,这样我就可以将它们打印到屏幕上。使用这个for循环可以让列表中的每个项目都显示出来。我是不是错过了什么?。很抱歉拖了这么久,我只是想让它发挥作用。

相关内容

  • 没有找到相关文章

最新更新