0
import java.util.*;  
import java.util.Arrays;
public class EmployeeWeeklyHours{    

      public static void main(String[] args) {    

               int[][] employeeHours= new int[][] {      
                   { 2, 4, 3, 4, 5, 8, 8},      
                   { 7, 3, 4, 3, 3, 4, 4},      
                   { 3, 3, 4, 3, 3, 2, 2},      
                   { 9, 3, 4, 7, 3, 4, 1},      
                   { 3, 5, 4, 3, 6, 3, 8},      
                   { 3, 4, 4, 6, 3, 4, 4},      
                   { 3, 7, 4, 8, 3, 8, 4},      
                   { 6, 3, 5, 9, 2, 7, 9}};  

               int [] finalHours = new int[8];  

               for (int i = 0; i < finalHours.length; i++) {   
                   int total = 0;  
                   for (int j = 0; j < finalHours.length - 1; j++) {  
                       total += employeeHours[i][j];  
                       finalHours[i] = total;  
                   }
               }

               java.util.Arrays.sort(finalHours);

               int[] sort = new int[finalHours.length];

               for (int i = 0; i < finalHours.length; i++) 
                   sort[i] = finalHours[i];        
               for (int i = 7; i > -1; i--) 
                   System.out.println(sort[i]);
      }
}

従業員 0: 2 4 3 4 5 8 8
従業員 1: 7 3 4 3 3 4 4
従業員 2: 3 3 4 3 3 2 2
従業員 3: 9 3 4 7 3 4 1
従業員 4: 3 5 4 3 6 3 8
従業員 5: 3 4 4 6 3 4 4
従業員 6: 3 7 4 8 3 8 4
従業員 7: 6 3 5 9 2 7 9

私のコードからわかるように、各従業員の総労働時間を降順でリストすることになっています。ただし、合計時間の横に従業員番号を表示する方法に困惑しているようです。

EG 「従業員 7 は 42 時間働きました。

従業員番号をハードコーディングせずに並べ替えられた番号と一緒にリストする方法はありますか? 私の質問に対する簡単な答えがあるような気がしますが、今は何も思い浮かびません。

4

3 に答える 3

0

1 つの解決策は、キーで自動的にソートされるため、TreeMap を使用することです。

TreeMap<Integer, Integer> treeMap = 
              new TreeMap<Integer, Integer>(Collections.reverseOrder());
for (int i = 0; i < finalHours.length; i++) {
    treeMap.put(finalHours[i], i);
}

for (Entry<Integer, Integer> entry : treeMap.entrySet()) {
    System.out.println( "Employee " + entry.getValue() + " worked " + entry.getKey() + " hours.");
}
于 2016-01-27T00:47:48.443 に答える
-1
for (int i=0; i < finalHours.length; i++) {
    System.out.println(String.format("Employee %d worked %d hours.", i, finalHours[i]));
}

ハードコーディングについて言及したので、ループを記述するときは、そこに魔法の「7」を入れるのではなく、finalHours.lengthまたはなどの変数を使用しますemployeeHours.length。一般に同じ原則が当てはまります。値がどうなるかを「知っている」場合でも、変数を参照してください。

于 2016-01-27T00:37:59.803 に答える
-2

このコードが必要な場合は?

import java.util.*;  
import java.util.Arrays;
public class EmployeeWeeklyHours{    

      public static void main(String[] args) {    

               int[][] employeeHours= new int[][]{      
               { 2, 4, 3, 4, 5, 8, 8},      
               { 7, 3, 4, 3, 3, 4, 4},      
               { 3, 3, 4, 3, 3, 2, 2},      
               { 9, 3, 4, 7, 3, 4, 1},      
               { 3, 5, 4, 3, 6, 3, 8},      
               { 3, 4, 4, 6, 3, 4, 4},      
               { 3, 7, 4, 8, 3, 8, 4},      
               { 6, 3, 5, 9, 2, 7, 9}};  

               String [] finalHours = new String[8];  

               for (int i = 0; i < finalHours.length; i++) 
               {   
                   int total = 0;  
                   for (int j = 0; j < finalHours.length-1; j++) 
                   {  

                       total += employeeHours[i][j];  
                       finalHours[i] = "Employee "+ i+" worked "+total + "hours";
                   }

               }

               java.util.Arrays.sort(finalHours);

               String[] sort = new String[finalHours.length];
               for (int i = 0; i < finalHours.length; i++) 
               {  
                   sort[i] = finalHours[i];  
               }

               for (int i = 7; i > -1; i--) 
               { 
                   System.out.println(sort[i]);
               }

      }
}

結果は

Employee 7 worked 41hours
Employee 6 worked 37hours
Employee 5 worked 28hours
Employee 4 worked 32hours
Employee 3 worked 31hours
Employee 2 worked 20hours
Employee 1 worked 28hours
Employee 0 worked 34hours

その結果を取得できるように、int[] 代替 String[] を使用します。さよなら。

于 2016-01-27T00:38:15.543 に答える