【问题标题】:How do I create a class with arrays and then pass values to a program?如何使用数组创建一个类,然后将值传递给程序?
【发布时间】:2014-03-04 19:19:56
【问题描述】:

我的班级作业是这样的: "编写一个使用以下数组作为字段的 Payroll 类:

  • employeeID - 包含七个整数的数组,用于保存员工标识号。 该数组应使用以下数字初始化: 5658845 4520125 7895122 8777541 8451277 1302850 7580489
  • 小时 - 一个由七个整数组成的数组,用于保存每位员工的工作小时数。
  • payRate - 包含七个双精度值的数组,用于保存每位员工的小时工资率。
  • 工资 - 包含七个双精度值的数组,用于保存每位员工的总工资。

类应该通过下标关联每个数组中的数据。 例如,hours 数组元素 0 中的数字应该是员工工作的小时数 其标识号存储在employeeID 数组的元素0 中。 同一员工的工资率应存储在 payRate 数组的元素 0 中。 除了适当的访问器和修改器方法之外, 该类应该有一个接受员工身份证号码的方法 作为参数并返回该员工的总工资。

我无法从我创建的程序中传递值。这是课程:

public class moduleArray2
{
   final int NUM_EMPLOYEES = 7;
   int[] employeeID = {5658845, 4520125, 7895122, 8777541, 8451277, 1302850, 7580489};
   int[] hours = new int[NUM_EMPLOYEES];
   double[] payRate = new double[NUM_EMPLOYEES];
   double[] wages = new double[NUM_EMPLOYEES];
   int employee = 0;
   double wage = 0;


   // setHours method
   public void setHours(int[] time)
   {
      time = hours;

   }

   // setPayRate method
   public void setPayRate(double[] pay)
   {
      pay = payRate;

   }

    // setWages method
   public void setWage(int[] time, int[] pay)
   {
      for (int index = 0; index < NUM_EMPLOYEES; index++)
         wages[index] = time[index] * pay[index];

   }

   //getEmployeeID method
   public int getEmployeeID(int index)
   {

      return employee;

   }   

   // getWage method
   public double getWage(int index)
   {


      return wage;

   }

}   

该程序应该显示每个员工编号并要求用户输入该员工的小时数和工资率。然后它应该显示每个员工的身份证号码和总工资。当我运行该程序时,它只是将所有内容都列为零值,包括员工 ID 号。

import java.util.Scanner;

public class moduleArrayDemo2
{
   public static void main(String[] args)
   {
      final int NUM_EMPLOYEES = 7;
      int[] time = new int[NUM_EMPLOYEES];
      double[] pay = new double[NUM_EMPLOYEES];

      // Create new Scanner object
      Scanner keyboard = new Scanner(System.in);

      // Create employee object
      moduleArray2[] employee = new moduleArray2[NUM_EMPLOYEES];

      // A loop that creates objects for each element
      for (int i = 0; i < employee.length; i++)
         employee[i] = new moduleArray2();


      for (int i = 0; i < employee.length; i++)
      {
         System.out.print("Enter hours for Employee #" + employee[i].getEmployeeID(i) +
                           ": ");
         time[i] = keyboard.nextInt();
         employee[i].setHours(time);

         System.out.print("Enter how much Employee #" + employee[i].getEmployeeID(i) +
                          " makes per hour: ");
         pay[i] = keyboard.nextDouble();
         employee[i].setPayRate(pay);

      }

      for (int i = 0; i < employee.length; i++)
      {
         System.out.println("Employee #" + employee[i].getEmployeeID(i) + 
                            " Wages: " + employee[i].getWage(i));

      }    

   }

 }

我可以在一个简单的程序中创建数组,并且我可以使用创建这些类的实例的程序来创建类。类中的数组......我完全迷失了。如何引用类中的数组来获取程序本身的值?任何反馈或建议将不胜感激!

【问题讨论】:

  • 你的二传手落后了。你有time = hours;,它将方法变量time(在方法执行后不再存在)设置为hours字段的值。您想做相反的事情:将字段 hours 设置为 time 变量的值(传递给方法的值)。
  • 酷。我继续切换它们,但在创建列表时程序仍然将所有内容读取为零值: for (int i = 0; i
  • 你的练习真的是Write a Payroll class that uses the following arrays as fields吗?您不能创建具有 ID、小时数、工资率和工资字段的 Employee 类吗?我简直不敢相信。
  • 我知道,对吧?我成功地创建了那个类,但是类中的数组让我头疼。
  • 为什么老师不看软件设计方面的书?很明显,问题需要创建一个包含employeeID、hour、.. 字段的Employee 类。并使用 List (在大多数情况下比数组好得多)。好的做法应该从一开始就学习。

标签: java


【解决方案1】:

首先你弄乱了访问器方法的参数、它们的实际值和访问的对象。

class ModuleArray2
    int[] employeeID = {5658845, 4520125, 7895122, 8777541, 8451277, 1302850, 7580489};
    int NUM_EMPLOYEES = employeeID.length; // I assume you've got it defined somewhere

    int[] hours = new int[NUM_EMPLOYEES];
    double[] payRate = new double[NUM_EMPLOYEES];
    double[] wages = new double[NUM_EMPLOYEES];

    // setHours method - will reassign the whole array of `hours` with the provided argument `time` ; I'm leaving this method with a signature that you have provided just to have a place to put my comment on it
    public void setHours(int[] time) {
        hours = time;
        // time = hours; // this is wrong - it would assign class field value to the temporary argument variable `time`, and then just throw it away (since `time` in this scope is temporary)
    }

    // setHours method - will set working hours in one of an array `hours` elements specified by the provided index - number of an employee it refers to
    public void setHours(int employeeNumber, int workedHours) {
        hours[employeeNumber] = workedHours;
    }

    // setPayRate method - same as above
    public void setPayRate(int employeeNumber, double payRate) {
        payRates[employeeNumber] = payRate;
    }

    // setWage method - same as above
    public void setWage(int employeeNumber, double wage) {
        wages[employeeNumber] = wage;
    }

    // getWage method - will return the wage for employee given by an index in array number
    public double getWage(int employeeNumber) {
        return wages[employeeNumber];
    }

    //getEmployeeID method - will return an ID of employee given by an index in array number
    public int getEmployeeID(int employeeNumber) {
        return employeeID[employeeNumber];
    }

    //getEmployeeIndexFromID method - will return the index of employee given by his ID number - this is inverse function of the function 'getEmployeeID'
    public int getEmployeeIndexFromID(int employeeID) {
        int index;
        // search implementation goes here
        // you should try to write it on your own
        return index;
    }
}

【讨论】:

    【解决方案2】:

    基于 Tax 程序,将 total 变量更改为一个数组,该数组接受来自用户的 5 个双精度值,然后将其传递给 tax 方法以获取总税额。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2015-08-31
      • 2015-07-24
      • 2014-12-07
      • 2016-04-08
      • 2018-09-28
      • 2013-08-27
      • 2018-10-02
      相关资源
      最近更新 更多