2016-03-27 12 views
3

Das Folgende ist eine Frage zur Java-Zuweisung, und ich habe die meisten davon abgeschlossen, aber ich habe ein Problem mit der Ausgabe in absteigender Reihenfolge (beginnend mit der höchsten Anzahl von Stunden bis zur niedrigsten Anzahl von geleisteten Stunden) diese Stunden auch mit dem Angestellten, der sie bearbeitet hat, übereinstimmen). Ich markierte den Teil des Problems, ich brauche Hilfe in fett und enthalten die Beispielausgabe.Java Eclipse sortiert und sortiert dann 1 Array, vielleicht mehr?

Problem:

die Wochenstunden der Mitarbeiter Computing Angenommen, die Wochenstunden für alle Mitarbeiter in einem zweidimensionalen Array gespeichert sind. In jeder Zeile werden die Arbeitsstunden eines Mitarbeiters mit n Spalten erfasst, wobei n ≥ 1 und n ≤ 7 die Anzahl der Tage in der Woche sind, an denen diese Mitarbeiter arbeiten. Die folgende Tabelle stellt beispielsweise ein Array dar, in dem die Arbeitszeit von acht Mitarbeitern 7 Tage in der Woche gespeichert wird. Schreiben Sie ein Programm, das als Eingaben die Anzahl der Mitarbeiter und die Anzahl der Arbeitstage in einer Woche berücksichtigt. Dann es dauert alle Mitarbeiter Informationen (Name und Anzahl der täglichen Stunden gearbeitet). Dieses Programm sollte Mitarbeiter und ihre gesamten Arbeitsstunden in einer Woche in abnehmender Reihenfolge der Gesamtstunden anzeigen.

Beispielausgabe:

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 

Hier ist, was ich bisher habe, glaube ich, dass ich etwas in der letzten for Schleife fehlt bin, aber das ist, warum ich bin Entsendung Dies. Jede Hilfe wird sehr geschätzt:

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

Sie sollten damit beginnen, eine Klasse für den Mitarbeiter mit der Angestelltennummer, Stunden und Gesamtstunden zu implementieren. Erstellen Sie eine "Liste" von Mitarbeitern und sortieren Sie dann die Liste mit "Collections.sort()" nach Stunden. Löschen Sie diese Frage, und versuchen Sie eine neue, die zeigt, was Sie versucht haben, nachdem Sie es versucht haben. – Andreas

+0

Meine EmployeeWorkHours-Klasse enthält bereits die Angestelltennummer, die Stunden und die Gesamtstunden. Ich bin mir nicht sicher was du meinst. Ich habe auch schon mehrere Versuche gemacht, aber ich stecke hier fest, weshalb ich das gepostet habe. –

+0

Sie haben statischen Code. Sie verwenden keine Objekte. Ich meinte, dass Sie Instanzen einer "Employee" -Klasse erstellen sollten, die die Werte als Felder enthält. Wenn Sie sortieren, sortieren sie alle zusammen. – Andreas

Antwort

1

Eine schnelle, aber schlechte Performance-Patch, um Ihren Code unter:

// 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 
     } 
    } 
} 

Eine bessere Möglichkeit, Ihre EmployeeWorkHours von Collections.sort() werden Sortierung als Andreas vorgeschlagen. Suchen Sie nach here für den Beispielcode.

+0

Vielen Dank! Ich habe den Code aktualisiert und es funktioniert prima, ich habe gerade beim Sortieren von Sammlungen und Arrays nachgelesen, aber ich kam nicht weiter. Danke noch einmal! –