【问题标题】:Creating and accessing Array data in Java在 Java 中创建和访问数组数据
【发布时间】:2017-04-13 23:03:48
【问题描述】:

我有一个教科书问题,我尝试了很多次但仍然无法解决这里的说明:"

编写一个使用以下数组作为字段的 Payroll 类:

  • 员工 ID。一个包含七个整数的数组,用于保存员工标识号。该数组应使用以下数字初始化:
    5658845 4520125 7895122 8777541 8451277 1302850 7580489
  • 小时。一个由七个整数组成的数组,用于保存每位员工的工作小时数
  • 支付率。一组 7 个 double 来保存每个员工的小时工资率
  • 工资。一个由七个 double 组成的数组,用于保存每个员工的总工资

    类应该通过下标关联每个数组中的数据。例如,hours 数组的元素 0 中的数字应该是员工的工作小时数,该员工的标识号存储在 employeeId 数组的元素 0 中。同一员工的工资率应存储在 payRate 数组的元素 0 中。

除了适当的访问器和修改器方法之外,该类还应该有一个方法,该方法接受员工的身份证号作为参数并返回该员工的总工资。

在一个完整的程序中演示该课程,该程序显示每个员工编号并要求用户输入该员工的小时数和工资率。然后它应该显示每个员工的身份证号码和总工资。

输入验证:不接受小时数或工资率小于 6.00 的负值。"

到目前为止,我有我的主要课程:

public class Payroll {
public static void main(String[] args){
    Pay work = new Pay();
    Scanner input = new Scanner(System.in);
    int[] hours = new hours[work.getLength()];

    for (int i=0; i<work.getLength(); ++i) {
        System.out.println("How many hours has Employee #"+work.getEmployeeId(i)+" worked?");
        input.nextInt() = hours[i];
        while (hours[i]<6){
            System.out.println("Error, inadequit value!");
            System.out.println("How many hours has Employee #"+work.getEmployeeId(i)+" worked?");
            input.nextInt() = hours[i];
        }

    }

}

我还有一个名为 Pay 的类:

public class Pay {
private int[] employeeId;
//private int[] hours = new hours[employeeId.length];
//private int[] pay = new pay[employeeId.length];
//private int[] wage = new wage[employeeId.length];

public Pay() {
    employeeId = new int[]{5658845, 4520125, 7895122, 8777541, 8451277, 1302850, 7580489};
}
public int getLength(){
    return employeeId.length;
}

public int[] getEmployeeId(int id) {
    return employeeId[id];
}

在这一切之后,我只是不知道下一步该去哪里。请帮忙。

【问题讨论】:

    标签: java arrays oop


    【解决方案1】:

    我将以最简单的方式而不是正确的方式来回答这个问题,因为我假设您对编程有点陌生。这是基于这样一个事实,即似乎没有强调类或任何真正的模块化。

    您只想拥有 4 个大小为 7 的数组。

    员工 ids 数组将由您设置。

    当您提示用户输入信息时,您会根据正在设置的员工的索引将其保存在正确的数组中。

    工资总额的方法只需要员工的身份证号码,在数组中找到他们的索引号,并获取计算和返回工资总额所需的信息。 (大概总工资是工资率 * 工作小时数)

    这是最简单的方法,不需要单独的类。

    【讨论】:

      【解决方案2】:

      根据面向对象的原则,更好的方法是避免使用多个数组。而是创建一个将所有员工属性作为对象保存在一起的类。

      public class Employee {
           private int id;
           private int hours;
           private double rate;
      
           // constructors
      
           // it should not have arguments such as id, hours or rate
           // because it is a method of this class and those attributes are 
           // implicitly assumed.
           public double getWage() {
              return hours * rate;
           }
      
           // toString method
      
           @Override
           public String toString() {
              return "Employee ID = " + id + "," + "hours = " .....
           }
      }
      

      可以在施工时预先计算工资并将其存储为另一个字段。或按上述方式在请求时计算。

      薪资类:

      public class Payroll {
      
            private Employee[] employees;
            private int lastIndex = 0;
      
            // constructors
            // for example, one constructor can accept initial size
            public Payroll(int size) {
               employees = new Employee[7];
            };
      
            public addEmployee(Employee employee) {
      
                 // need to check overflow before attempting to add
      
                 // add employee
                 employees [lastIndex ] = emplyee;
                 lastIndex++;
            }
      
            // more methods, such remove etc
      
      
      }
      

      现在是驱动程序或应用程序类

      public class Driver {
      
      
       public static void main(String[] args){
          Payroll payroll = new Payroll (7);
      
          // code to pupulate the Payroll with values
      
          for ( ) {
                // construct new Emplyee object
                // add object to Payroll
      
          }
      
          // Printing 
          for (Emplyee e: Payroll) {
              System.out.println(e.toString());
          }
      
      
      }
      

      }

      请注意,应用程序或驱动程序类与工资单是分开的,现在每个类只做一件事,而且只做那件事。请记住,Payroll 类不关心填充自身或打印其内容等。

      【讨论】:

        猜你喜欢
        • 2014-09-17
        • 2011-01-23
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 2011-11-06
        • 2012-09-21
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多