2016-03-27 11 views
3

以下はJavaの割り当てに関する質問ですが、そのほとんどは完了していますが、降順で出力を表示する際に問題が発生しています。また、それらの時間を彼らに働いた従業員と一致させる)。私はの太字のの中で助けが必要な問題の部分を強調し、サンプル出力を含めました。Java Eclipseで配列を並べ替えて1つの配列を並べ替えることは可能でしょうか?

問題:

従業員の毎週の時間を計算するには、すべての従業員のために毎週時間が2次元配列に格納されていると仮定します。各行は、従業員のn日の勤務時間をn列(n≧1、n≤7)で記録します。これらの従業員が働く週の日数を表します。たとえば、次の表は、8人の従業員の勤務時間を1週間に7日間格納する配列を表しています。入力として、従業員の数と週の就業日数を取り込むプログラムを書く。その後、 はすべての従業員情報(1日の作業時間の名前と数)を取り込みます。 このプログラムでは、従業員とその合計時間を合計時間の降順で週に表示する必要があります。

サンプル出力:

Employee 7 worked 39 hours 

Employee 6 worked 37 hours 

Employee 0 worked 34 hours 

Employee 4 worked 32 hours 

Employee 3 worked 31 hours 

Employee 1 worked 28 hours 

Employee 5 worked 28 hours 

Employee 2 worked 24 hours 

ここで私はこれまで持っているものだ、私は最後のforループで何かが欠けていますが、私は投稿してる理由です信じていますこの。すべてのヘルプは非常に高く評価されています

import java.util.Scanner; 
import java.util.Arrays; 

public class EmployeeWorkHours { 
public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 
     System.out.println("How many Employee's do you have?: "); 
     int NUM_OF_EMPLOYEES = scan.nextInt(); 
     scan.nextLine(); 

     int [][]hours; 
     int []totalHours= new int[NUM_OF_EMPLOYEES]; 

     hours = new int[NUM_OF_EMPLOYEES][7]; 
     String[] employee = new String[NUM_OF_EMPLOYEES]; 

     // input Names 
     for (int x = 0; x < (employee.length); x++) 
     { 
      System.out.println("Name of Employee " + (x + 1) + ": "); 
      String name = scan.nextLine(); 
      employee[x] = name; 

     } 

     // input Hours 
     for (int z = 0; z < employee.length; z++) 
     { 
      System.out.println("Beginning on Monday, enter the hours Employee "+ (z + 1)+ " has worked each day (Separate each day by spaces): "); 
      for (int a = 0; a < 7; a++) 
      { 
       hours[z][a] = scan.nextInt(); 
      } 
      scan.nextLine(); 
     } 

     // Print everything in for loop 
     for (int i = 0; i < employee.length; i++) 
     { 
      totalHours[i]=0; 
      for(int j=0; j<7; j ++) 
      { 
       totalHours[i] = totalHours[i]+hours[i][j]; 
      } 
      // I THINK I NEED TO ADD SOMETHING HERE BUT I'M NOT SURE WHAT 
      // Arrays.sort(totalHours); gives me the wrong output, I'm stuck 

      System.out.println("Employee " + (i + 1) +" worked " + totalHours[i] + " hours"); 
     } 
} 
} 
+0

「Employee」のクラスを従業員番号、時間、合計時間で実装することから始めてください。従業員の 'List'を作成し、' Collections.sort() 'を使って合計時間でリストをソートします。この無回答の質問を削除してから、あなたが試したことを示す新しい質問をしてください。 – Andreas

+0

My EmployeeWorkHoursクラスには、従業員番号、時間、および合計時間がすでに設定されています。私はあなたが何を意味するか分からない。また、私はすでにいくつかの試みを行ってきましたが、私はここにこだわっているので、これを投稿しました。 –

+0

静的なコードがあります。オブジェクトは使用しません。私は 'Employee'クラスのインスタンスを作成し、その値をフィールドとして持たなければならないことを意味しました。そうすれば、あなたが並べ替えると、それらはすべて一緒に並べ替えます。 – Andreas

答えて

1

以下のコードに簡単に悪いパフォーマンスパッチ:アンドレアスが提案されているよう

// Print everything in for loop 
for (int i = 0; i < employee.length; i++) { 
    totalHours[i] = 0; 
    for (int j = 0; j < 7; j++) { 
     totalHours[i] = totalHours[i] + hours[i][j]; 
    } 
    // I THINK I NEED TO ADD SOMETHING HERE BUT I'M NOT SURE WHAT 
    // Arrays.sort(totalHours); gives me the wrong output, I'm stuck 

} 

//patch starts here 
int[] totalHoursSortedAsc = Arrays.copyOf(totalHours, totalHours.length); 
Arrays.sort(totalHoursSortedAsc); 
for (int i = totalHoursSortedAsc.length - 1;i>=0;i--) { 
    for (int j = 0;j < totalHours.length;j++) { 
     if (totalHoursSortedAsc[i] == totalHours[j]) { 
      System.out.println("Employee " + (j + 1) + " worked " + totalHours[j] + " hours"); 
      totalHours[j] = -1; //Employees may work the same time 
     } 
    } 
} 

良い方法はCollections.sort()してEmployeeWorkHoursをソートされます。サンプルコードはhereを参照してください。

+0

ありがとうございました!私はコードを更新し、それは素晴らしい作品、私はコレクションと配列を並べ替える上で読んでいたが、私はどこにもいませんでした。再度、感謝します! –