加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何修改此程序以使用ArrayList?

发布时间:2020-12-15 04:14:03 所属栏目:Java 来源:网络整理
导读:首先,以下是说明: http://ideone.com/eRHwUo 是的,这是功课!有了这样说(因为我只是喜欢这种语言),当你发布答案时,请尝试使用伪代码,这样我就不会复制并粘贴到我的程序中.谢谢! 就代码而言,我已经完成了用户输入所有输入的部分所需的所有内容.但是,我需要
首先,以下是说明:
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;
    }
}

那么,请问好吗?
最后评论:
(1)我不明白Employee类下应该做什么’Pay Object’?
(2)如何使用输入数据创建“支付对象”,然后创建员工对象?
这些是我不太清楚的说明中的两个部分,因此如果你能对它有所了解,它会有所帮助!
(3)如果我的语法中有任何相似之处,请告诉我,以便我可以相应地进行更改.我还是这种语言的新手,所以任何帮助都会很棒.

编辑:我已用评论更新了我的代码:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读