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

Posted

技术标签:

【中文标题】我想通过用户输入添加到 arrayList【英文标题】:I want to add to an arrayList through user input 【发布时间】: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 获取数据。 【参考方案1】:

我能想到的几个小窍门:

    EmployeeList 不应扩展 Employee。 OOP 的主要规则是,如果 B 是一个 A,则 A 类扩展 B 类。这显然不是这里的情况——employeeList 不是员工,它是员工列表(在我看来你不不需要为此上课,只需List&lt;Employee&gt;)

    我会将逻辑与数据分开。含义 - Employee 类应该只保存员工的数据,不处理扫描和从用户那里获取输入。构造函数在我看来应该很简单,例如:

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

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

    高级代码应该是这样的(我会把细节留给你): 向用户显示菜单选项 如果他想添加用户,获取两个变量的输入,创建员工对象并将其添加到列表中 如果他想显示,浏览列表并打印(打印可以覆盖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 循环获取列表中的每个项目以显示它们。我在这里错过了什么吗?抱歉这有点拖了,我只是想让这个工作。

【讨论】:

以上是关于我想通过用户输入添加到 arrayList的主要内容,如果未能解决你的问题,请参考以下文章

使用数组而不是 Java 中的 ArrayList 从用户输入创建一个新对象

在空arraylist中存储用户输入

用户添加放置图钉,谷歌地图

ActionListener添加到JButton但不起作用

JAVA - 添加到arrayList一个字符串

如何在 C# 中将用户输入添加到二维数组