📜  Java程序找出哪个部门的安置程序最高 (1)

📅  最后修改于: 2023-12-03 14:43:03.652000             🧑  作者: Mango

Java程序找出哪个部门的安置程序最高

这个问题可以通过编写Java程序来解决。我们将使用Java编程语言来计算每个部门的平均安置程序并找出其中最高的部门。

数据来源

为了解决这个问题,我们需要一个数据源。这里我们使用一个假想的公司的员工表格,包括员工姓名、所属部门和安置程序数。我们将使用一个包含这些信息的CSV文件,使用Java的CSV解析库来读取数据。

CSV文件的格式如下:

name,department,salary
John,Engineering,100000
Jane,Sales,80000
Bob,Engineering,120000
...
计算平均值

我们需要计算每个部门的平均安置程序数。为了实现这一目标,我们将创建一个包含每个部门安置程序总数,并且记录每个部门员工个数的映射结构。

Map<String, Integer> departmentProgramCount = new HashMap<>();
Map<String, Integer> departmentEmployeeCount = new HashMap<>();

// Read data
while ((record = csvReader.readNext()) != null) {
    String department = record[1];
    Integer programCount = Integer.parseInt(record[2]);

    departmentProgramCount.put(department, departmentProgramCount.getOrDefault(department, 0) + programCount);
    departmentEmployeeCount.put(department, departmentEmployeeCount.getOrDefault(department, 0) + 1);
}

// Calculate average
Map<String, Double> departmentAverageProgramCount = new HashMap<>();
for (Map.Entry<String, Integer> entry : departmentProgramCount.entrySet()) {
    String department = entry.getKey();
    int programCount = entry.getValue();
    int employeeCount = departmentEmployeeCount.get(department);

    double average = (double) programCount / employeeCount;
    departmentAverageProgramCount.put(department, average);
}

在上面的代码中,我们同时维护了每个部门的平均值和员工个数。这使我们可以直接计算平均值,而不需要重复迭代数据。

找出最大值

现在我们已经计算了每个部门的平均值。我们还需要找出哪个部门的平均值最高。为此,我们只需要在我们已经计算出来的结果上迭代,找到最大值即可。

String departmentWithHighestAverage = null;
double highestAverage = Double.MIN_VALUE;
for (Map.Entry<String, Double> entry : departmentAverageProgramCount.entrySet()) {
    String department = entry.getKey();
    double average = entry.getValue();

    if (average > highestAverage) {
        departmentWithHighestAverage = department;
        highestAverage = average;
    }
}

return String.format("部门 '%s' 的平均安置程序最高,为 %f", departmentWithHighestAverage, highestAverage);

在上面的代码中,我们使用了一个辅助变量highestAverage来记录当前的最大值。如果我们发现某个部门的平均值比当前最大值要大,我们更新最大值和当前的部门。

完整代码

下面是完整的代码片段,它将一个包含员工信息的CSV文件作为输入并返回一个包含部门平均安置程序的映射结构:

import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;

public class DepartmentProgram {

    public static void main(String[] args) {
        try {
            String pathToCsv = "path/to/employee_data.csv";
            String result = findDepartmentWithHighestAverage(pathToCsv);
            System.out.println(result);
        } catch (IOException | CsvException e) {
            System.err.println("Unable to read CSV file");
            e.printStackTrace();
        }
    }

    public static String findDepartmentWithHighestAverage(String pathToCsv) throws IOException, CsvException {
        Reader reader = Files.newBufferedReader(Paths.get(pathToCsv));
        CSVReader csvReader = new CSVReader(reader);

        Map<String, Integer> departmentProgramCount = new HashMap<>();
        Map<String, Integer> departmentEmployeeCount = new HashMap<>();

        String[] record;
        while ((record = csvReader.readNext()) != null) {
            String department = record[1];
            Integer programCount = Integer.parseInt(record[2]);

            departmentProgramCount.put(department, departmentProgramCount.getOrDefault(department, 0) + programCount);
            departmentEmployeeCount.put(department, departmentEmployeeCount.getOrDefault(department, 0) + 1);
        }

        Map<String, Double> departmentAverageProgramCount = new HashMap<>();
        for (Map.Entry<String, Integer> entry : departmentProgramCount.entrySet()) {
            String department = entry.getKey();
            int programCount = entry.getValue();
            int employeeCount = departmentEmployeeCount.get(department);

            double average = (double) programCount / employeeCount;
            departmentAverageProgramCount.put(department, average);
        }

        String departmentWithHighestAverage = null;
        double highestAverage = Double.MIN_VALUE;
        for (Map.Entry<String, Double> entry : departmentAverageProgramCount.entrySet()) {
            String department = entry.getKey();
            double average = entry.getValue();

            if (average > highestAverage) {
                departmentWithHighestAverage = department;
                highestAverage = average;
            }
        }

        return String.format("部门 '%s' 的平均安置程序最高,为 %f", departmentWithHighestAverage, highestAverage);
    }
}

以上就是我们的Java程序,它处理一个包含员工信息的CSV文件,计算每个部门的平均安置程序,并返回平均安置程序最高的部门。