我想通过用户输入添加到 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<Employee>
)
我会将逻辑与数据分开。含义 - 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的主要内容,如果未能解决你的问题,请参考以下文章