带有“2D”数组的输出/索引不正确

时间:2015-01-29 22:50:18

标签: java

我有这个java代码,它应该给你每个员工每周工作的小时数,然后按降序排列总小时数。问题是,当它编译时,员工ID被搞砸了。

有谁知道为什么?

由于

static void list(Object[] a, Object n) {

    int empID = Arrays.binarySearch(a, n);
        System.out.println("Employee " + empID + " :  " + n);
}

public static void main(String[] args) {

    int[][] hours = new int[][]{
            {2, 2, 4, 3, 4, 3, 5, 9},
            {3,7, 5, 4, 3, 5, 9, 4},
            {12, 5, 9, 4, 3, 3, 2, 2},
            {4, 9, 3, 3, 5, 9, 4, 10},
            {5, 3, 5, 9, 3, 6, 3, 8},
            {6, 3, 4, 4, 6, 3, 14, 4},
            {7, 3, 7, 4, 8, 3, 5, 9},
            {8, 6, 3, 5, 9, 8, 7, 9}};

    Integer[] totalHours = new Integer[8];
    for (int i = 0; i < 8; i++) {
        int sum = 0;
    for (int j = 1; j < 8; j++) {
        sum += hours[i][j];
        totalHours[i] = sum;
    }

}


    Integer[] sorted;

    sorted = new Integer[totalHours.length];
        for (int i = 0; i < totalHours.length; i++) {
            sorted[i] = totalHours[i];
        }

    Arrays.sort(sorted, Collections.reverseOrder());
        for (int i = 0; i < sorted.length; i++) {

        }   

        for (int i = 0; i < sorted.length; i++) {
            list(totalHours, sorted[i]);
        }

}

1 个答案:

答案 0 :(得分:1)

理想情况下,您会创建一个Employee课程,其中包括ID和工时。一旦有了员工清单,您就可以愉快地搜索,排序,总计等等。

例如:

class Employee {
    private final int id;
    private int[] hours;
    public int getTotalHours() {
        return Arrays.stream(hours).sum();
    }
}

List<Employee> employees;
Collections.sort(employees, (e1, e2) -> e1.getTotalHours() - e2.getTotalHours());

如果由于某种原因你特别想要创建一个Employee类并且你想继续使用id作为hours数组的索引,那么你可以创建一个单独的数组员工ID并按总小时排序。

int[] employees = new int[hours.length];
for (int i = 0; i < hours.length; i++)
    employees[i] = i;
Arrays.sort(employees, (e1, e2) -> getTotalHours(e1) - getTotalHours(e2));

然后,您将拥有一个已排序的员工ID数组,这些数据也是hours数组的索引。

但是,坦率地说,这是一个非常黑客的方法,所以如果可以的话,创建一个Employee类。