【问题标题】:How do I get the sums of the rows of a 2D array relative to the elements of a 1D array?如何获得 2D 数组的行相对于 1D 数组元素的总和?
【发布时间】:2021-06-02 04:51:31
【问题描述】:

我的代码计算一组小时工的工作小时数时遇到问题,我无法获取信息来排队。

我有代码的基本信息,如下图:

public static void main(String[] args) {
    double[][] employeeHours = {
            {0.0, 8.0, 8.0, 8.5, 8.0, 9.0, 0.0},
            {0.0, 9.0, 9.0, 8.5, 8.0, 7.5, 0.0},
            {0.0, 8.5, 8.0, 8.6, 8.6, 9.5, 2.0},
            {0.0, 4.75, 6.0, 6.25, 6.5, 0.0, 0.0},
            {0.0, 0.0, 0.0, 0.0, 5.25, 5.25, 6.0}};

    double[] totalHoursPerEmployee = sumEmployeeHours(employeeHours);
    for (double j : totalHoursPerEmployee) {
        System.out.println(" worked hours " + j);
    }
    System.out.println(" worked");
}
public static double[] sumEmployeeHours(double[][] hours) {
    double[] totalHoursPerEmployee = new double[hours.length];
    for (double i = 0; i < hours.length; i++) {
        int sum = 0;
        for (double j = 0; j < hours[(int) i].length; j++) {
            sum += hours[(int) i][(int) j];
        }
        totalHoursPerEmployee[(int) i] = sum;
    }
    return totalHoursPerEmployee;
}
static void end(String[] xnames) {
    String[] names = {"Tara Teamlead", "Harry Hacker",
            "Carl Coder", "Paula Programmer", "Darrin Debugger"};
    for (String name : names) {
        System.out.println(name);
    }
}

但我无法获得保持这种状态的最终信息:

Tara Teamlead worked 41.50
Harry Hacker worked 42.00
Carl Coder worked 45.20
Paula Programmer worked 23.50
Darrin Debugger worked 16.50

【问题讨论】:

    标签: java arrays multidimensional-array


    【解决方案1】:

    问题出在这个方法上:

    public static double[] sumEmployeeHours(double[][] hours) {
        double [] totalHoursPerEmployee = new double [hours.length];
        for (double i = 0; i < hours.length; i++) {
            int sum = 0;
            for (double j = 0; j < hours[(int) i].length; j++) {
                sum += hours[(int) i][(int) j];
            }
            totalHoursPerEmployee[(int) i] = sum;
        }
        return totalHoursPerEmployee;
    }
    

    首先,在 forloop 中循环时,使用 INT 作为迭代器更容易,而不是 Double。然后你不需要转换它。其次,为了能够以小数形式保存每位员工的总小时数,您需要将总和声明为 DOUBLE。现在将其声明为 INT 时,不能存储小数。

    我尝试了这种方法(C#),但是您可以通过执行以下操作来修改您的方法以使其正常工作:

    将 for 循环更改为 INT。 将总和更改为 DOUBLE。

    public static double[] sumEmployeeHours(List<List<double>> hours)
        {
            double[] totalHoursPerEmployee = new double[hours.Count];
            for (int i = 0; i < hours.Count; i++)
            {
                double sum = 0;
                for (int j = 0; j < hours[(int)i].Count; j++)
                {
                    var hourss = hours[i][j];
                    sum += hourss;
                }
                totalHoursPerEmployee[(int)i] = sum;
            }
            return totalHoursPerEmployee;
        }
    

    【讨论】:

      【解决方案2】:

      您可以按如下方式简化代码:

      double[][] hours = {
              {0.0, 8.0, 8.0, 8.5, 8.0, 9.0, 0.0},
              {0.0, 9.0, 9.0, 8.5, 8.0, 7.5, 0.0},
              {0.0, 8.5, 8.0, 8.6, 8.6, 9.5, 2.0},
              {0.0, 4.75, 6.0, 6.25, 6.5, 0.0, 0.0},
              {0.0, 0.0, 0.0, 0.0, 5.25, 5.25, 6.0}};
      
      String[] names = {"Tara Teamlead", "Harry Hacker",
              "Carl Coder", "Paula Programmer", "Darrin Debugger"};
      
      // assume the lengths of 2D and 1D arrays are the same
      for (int i = 0; i < names.length; i++) {
          System.out.print(names[i]);
          System.out.printf(" worked %.2f", Arrays.stream(hours[i]).sum());
          System.out.println();
      }
      

      输出:

      Tara Teamlead worked 41,50
      Harry Hacker worked 42,00
      Carl Coder worked 45,20
      Paula Programmer worked 23,50
      Darrin Debugger worked 16,50
      

      另见:How do I sort two arrays relative to each other?

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 2014-10-23
        • 2020-12-18
        • 2018-09-16
        • 2018-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多