我一直在尝试创建一个小程序,提示用户输入一个员工姓名和工资,将其添加到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;
} */
}
}
我能想到的几个技巧:
EmployeeList
不应扩展Employee
。OOP的主要规则是,如果B是A,则类A扩展类B。这里显然不是这样——employeeList不是雇员,而是雇员列表(在我看来,你不需要类,只需要List<Employee>
(-
我会把逻辑和数据分开。意思是
Employee
类应该只保存员工的数据,而不处理扫描和从用户那里获得输入。在我看来,构造函数应该很简单,比如:public Employee(String name, int salary) { this.name = name; this.salary = salary; }
获取数据的逻辑应该在这个类之外,要么在
EmployeeHandler
中,要么在main本身中。既然你把它放在员工内部,那么当一些逻辑在员工内部和一些主要逻辑中时,你就很难继续下去。 - 高级代码应该是这样的(我将把细节留给您(:
- 向用户显示菜单选项
- 如果他想添加用户,请获取两个变量的输入,创建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循环可以让列表中的每个项目都显示出来。我是不是错过了什么?。很抱歉拖了这么久,我只是想让它发挥作用。