【问题标题】:I want to add to an arrayList through user input我想通过用户输入添加到 arrayList
【发布时间】:2017-02-26 21:37:27
【问题描述】:

我一直在尝试创建一个小程序,提示用户输入,将员工姓名和薪水添加到 arrayList,然后在屏幕上显示选项(例如 0:退出,1:添加,2:显示),读取输入,然后根据输入继续。显示将只是(例如姓氏:史密斯薪水:14000 英镑。只需要一些帮助来指出我正确的方向。我目前有 3 个类 Employee、Employee List 和 Employee测试。

这个类提示用户输入。

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;
    } */

}

}

【问题讨论】:

  • 您的问题是什么?您需要有关代码注释部分的帮助吗?
  • 同样使用当前代码EmployeeList 不是那么有用,因为您只能使用构造函数添加元素,这意味着该类的每个实例在他的列表中只能有一个Employee 对象。
  • 如何将用户输入的信息添加到数组列表中,然后显示选项。我可以退出(停止程序),添加(添加员工姓/薪水)或显示数组列表中的内容?
  • Java 字段名(变量名)是驼峰式,如 lastName 和 Salary.. 您的 Employee 类应该是一个带有 getter 和 setter 的普通 Java 类。您的 Scanner 输入应该在您的 EmployeeTest 类中。 EmployeeList 不应扩展 Employee。
  • 要退出程序,您可以在main方法中添加return;或使用System.exit(0);方法;要将员工添加到列表中,您应该在 EmployeeList 中声明一个 add(Employee employee) 方法;要显示员工信息,您必须遵循 @GilbertLeBlanc 的建议,将您的 Employee 设置为 Plain Old Java Object 并使用 getter 获取数据。

标签: java oop arraylist java.util.scanner user-input


【解决方案1】:

我能想到的几个小窍门:

  1. EmployeeList 不应扩展 Employee。 OOP 的主要规则是,如果 B 是一个 A,则 A 类扩展 B 类。这显然不是这里的情况——employeeList 不是员工,它是员工列表(在我看来你不不需要为此上课,只需List&lt;Employee&gt;)
  2. 我会将逻辑与数据分开。含义 - Employee 类应该只保存员工的数据,不处理扫描和从用户那里获取输入。构造函数在我看来应该很简单,例如:

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

    获取数据的逻辑应该在这个类之外,要么在EmployeeHandler 中,要么在主体本身中。由于您将其放在员工内部,因此当某些逻辑在员工中而某些在主体中时,您将无法继续。

  3. 高级代码应该是这样的(我会把细节留给你):
    • 向用户显示菜单选项
    • 如果他想添加用户,获取两个变量的输入,创建员工对象并将其添加到列表中
    • 如果他想显示,浏览列表并打印(打印可以覆盖Employee类中的toString
    • 如果他想退出,就结束
    • 继续这个循环,直到他想退出

【讨论】:

  • 我现在改变了它,所以它只得到了 lastName 和salary 变量,以及它们的getter 和setter。我最好在员工测试类的 main 方法中运行用户提示吗?
  • 我将如何将其添加到列表中?
【解决方案2】:
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;
      }
   }
}

然后在您的 main 方法中,您可以创建员工对象。

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>();

添加到它使用 add

employeeList.add(employee);

这应该可以让你开始

编辑:

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

    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());
 }

【讨论】:

    【解决方案3】:

    我将员工类修改为如下所示:

    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 循环获取列表中的每个项目以显示它们。我在这里错过了什么吗?抱歉这有点拖了,我只是想让这个工作。

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 2014-10-02
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多