java – 如何修改此程序以使用ArrayList?
首先,以下是说明:
http://ideone.com/eRHwUo 是的,这是功课!有了这样说(因为我只是喜欢这种语言),当你发布答案时,请尝试使用伪代码,这样我就不会复制并粘贴到我的程序中.谢谢! 就代码而言,我已经完成了用户输入所有输入的部分所需的所有内容.但是,我需要帮助将数据从类“传输”到我们应该使用的’ArrayList’.我想,一旦我把它弄清楚,我将能够对数组进行排序以找到选择“B”的ID号,如果用户输入“C”,我将只循环显示所有内容的数组它. 无论如何,在代码上(这是主要的): /* * Name: * Date: * Assignment 2 */ import java.util.Scanner; public class homework { public static void main(String[] args) { char userSelection; String convertString; String userStrings; Scanner kbd = new Scanner(System.in); do { System.out.println("Here are your choices:"); System.out.println("A. Enter employee data" + "nB. Search for employee data" + "nC. List all data" + "nD. Exit"); convertString = kbd.next(); userSelection = convertString.charAt(0); switch(userSelection) { case 'A': GetUserInfo(); break; case 'B': // Stuff; break; case 'C': // Display all data; break; case 'D': System.out.println("Goodbye!"); break; default: System.out.println("Error,that is not a valid entry. Please try again."); } } while (userSelection > 'D'); } // Write functions here public static void GetUserInfo() { String firstName; String lastName; String empID; double hourlyRate; int hoursWorked; double withPercent; Scanner kbd = new Scanner(System.in); System.out.println("What is your first name?"); firstName = kbd.next(); System.out.println("What is your last name?"); lastName = kbd.next(); System.out.println("What is your employee ID?"); empID = kbd.next(); Employee user = new Employee(empID); user.setFirstName(firstName); user.setLastName(lastName); System.out.println("What is your hourly rate?"); hourlyRate = kbd.nextDouble(); System.out.println("How many hours did you work?"); hoursWorked = kbd.nextInt(); System.out.println("What is your withholding percentage?"); withPercent = kbd.nextDouble(); Pay user1 = new Pay(); user1.setHourlyRate(hourlyRate); user1.setHoursWorked(hoursWorked); user1.setWithPercent(withPercent); } } 这是Employee类: public class Employee { // Members of the class String firstName; String lastName; String employeeID; // remember about the pay object // EmployeeID constructor public Employee(String empID) { this.employeeID = empID; } // Below are the various getters and setters of the Employee class public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmployeeID() { return employeeID; } } 这是Pay类: public class Pay { // Members of the class double hourlyRate; int hoursWorked; double withPercent; // Various getters and setters of the Pay class public double getHourlyRate() { return hourlyRate; } public void setHourlyRate(double hourlyRate) { this.hourlyRate = hourlyRate; } public int getHoursWorked() { return hoursWorked; } public void setHoursWorked(int hoursWorked) { this.hoursWorked = hoursWorked; } public double getWithPercent() { return withPercent; } public void setWithPercent(double withPercent) { this.withPercent = withPercent; } // Calculates the raw payment public double CalcPayRate(double hourlyRate,int hoursWorked) { return hourlyRate * hoursWorked; } // If the employee has worked overtime,calculates the new payment public double CalcOvertimePay(double hourlyRate,int hoursWorked) { double rawPay = 0; rawPay = hourlyRate * hoursWorked; if (hoursWorked > 40) { rawPay *= 1.5; } return rawPay; } // Calculates final amount that the employee will be paid public double CalcTotalPay(double hourlyRate,int hoursWorked,double withPercent) { double rawPay = 0; double subTotalPay = 0; double finalPay = 0; rawPay = hourlyRate * hoursWorked; subTotalPay = rawPay * withPercent; finalPay = rawPay - subTotalPay; return finalPay; } } 那么,请问好吗? 编辑:我已用评论更新了我的代码: public class homework { public static void main(String[] args) { // ArrayList<Employee> employeeList = new ArrayList<Employee>(); do { // Stuff commented out for readability case 'A': PromptForInput(); // Employee emp = PromptForInput(); // employeeList.add(emp); break; } while (userSelection > 'D'); } // public static Employee PromptInput() public static void PromptForInput() { Employee user = new Employee(empID); // Isn't this supposed to be returned as well? Pay user1 = new Pay(); user1.setHourlyRate(hourlyRate); user1.setHoursWorked(hoursWorked); user1.setWithPercent(withPercent); //return user; } } 它是怎么看的? 解决方法
首先来看看
Collections.
如果我这样做…… 我将从getUserInfo方法返回Employee并将其添加到调用方法中的ArrayList.这使得getUserInfo方法专注于单一责任. 如果用户输入的值未通过验证,我还允许getUserInfo返回null,但这可能超出了要求的范围. 例如… List<Employee> employees = // create ArrayList... //... Employee emp = getUserInfo(); if (emp != null) { employees.add(emp); } 您还应该在创建Pay对象时为其设置Pay对象,这会将Pay对象与Employee关联,以便您以后可以找到它 至于你的Pay对象. CalcPayRate,CalcOvertimePay和CalcTotalPay不需要参数,因为这些方法所需的所有信息都应该从对象的属性中获得…… 例如… public double getRawPay() { return getHoursWorked() & getHourlyRate(); } 我也鼓励你去看看Code Conventions for the Java Programming Language 更新了#1 将Pay对象与Employee关联与您如何关联员工姓名之类的内容没有什么不同 基本上,您需要提供一个实例字段/属性来保存引用,并提供一些设置和获取引用的方法,例如…… public class Employee { //... Pay pay; // EmployeeID constructor public Employee(String empID) { this.employeeID = empID; } // EmployeeID constructor public Employee(String empID,Pay pay) { this(empID); this.pay = pay; } public void setPay(Pay pay) { this.pay = pay; } public Pay getPay() { return pay } //... } 我提供了第二个构造函数,你真的不需要它,但它是一个如何实现它的演示. 然后你只需将Pay的参考传递给员工…… Employee emp = new Employee(...); //... Pay pay = new Pay(); //... emp.setPay(pay); 更新#2 另一种方法是在创建Employee时创建Pay实例… public class Employee { //... Pay pay = new Pay(); // EmployeeID constructor public Employee(String empID) { this.employeeID = empID; } 这表明我们不再需要setPay,但这取决于你. 当您需要获取或设置Pay的值时,您可以简单地询问Employee的实例 Employee emp = ...; emp.getPay().setHourlyRate(hourlyRate); //... double hourlyRate = emp.getPay().getHourlyRate(); 更新了#3 基本上,您需要将Pay实例与Employee实例相关联.如果它更容易,请将其命名为其他… 基于Update#1中的示例 public static Employee PromptForInput() { String firstName; String lastName; String empID; double hourlyRate; int hoursWorked; double withPercent; //... Employee user = new Employee(empID); user.setFirstName(firstName); user.setLastName(lastName); //... Pay payObj = new Pay(); payObj .setHourlyRate(hourlyRate); payObj .setHoursWorked(hoursWorked); payObj .setWithPercent(withPercent); // Don't forget to give an instance of Pay to the instance // of Employee user.setPay(payObj); return user; } 将Employee视为一个容器,它包含员工的姓名和ID以及他们的工资细节.当你开始使用新的Employee实例时,它只是一个空容器,你需要填充它… 当您需要时,您只需通过getPay从员工处请求和支付实例 更新#4 基于你的新代码,我只会提出一个小建议…… 在您的显示所有数据选择中,您可以使用以下循环来显示员工和员工的工资率,例如…… for (int i = 0; i < employeeList.size(); i++) { Employee emp = employeeList.get(i); System.out.println(emp); System.out.println(emp.getPay().CalcPayRate()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |