我有这个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]);
}
}
答案 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类。