2016-05-18 13 views
-5

Ich brauche Hilfe bei dieser Übung.Java - Klasse, neues Array von Objekten

Ich möchte das Gehalt aller Mitarbeiter zusammen drucken, aber ich kann es nicht zur Arbeit bekommen.

Wenn ich eine neue Abteilung erstellen, möchte ich Arbeit erhalten, dass ich nur den Namen des Objekts (Worker) schreibe, nicht erneut Informationen eingeben.

Tatsächliches Ergebnis (es schief geht an den Druck von 0):

id: 1234567 name: david Hourly Wage: 25 Number Of Hours: 50 Final Salary: 1250 
id: 234567 name: foo Hourly Wage: 50 Number Of Hours: 30 Final Salary: 1500 
0 
calculate Department Salery: 0 

Erwartetes Ergebnis: Die Berechnung der Gehälter aller zusammen Arbeiter.

Hauptklasse

public class main { 
    public static void main(String[] args) { 
     Worker work1 = new Worker("1234567"); 
     work1.name = "david"; 
     work1.Number_Of_Hours = 50; 
     work1.Hourly_Wage = 25; 

     Worker work2 = new Worker("234567","foo",50,30); 

     work1.calculateSalery(55); 
     work2.calculateSalery(60); 

     System.out.println(work1.toString()); 
     System.out.println(work2.toString()); 


     Department cp = new Department(); 
     cp.addEmploy("123", "av", 25, 50); 

     System.out.println(cp.calculateDepartmentSalery()); 

     System.out.println(cp.toString()); 
    } 
} 

Klasse Worker

public class Worker { 
    public String id; 
    public String name; 
    public int Hourly_Wage; 
    public int Number_Of_Hours; 

    public Worker(String _id) { 
     id = _id; 
    } 

    public void addHoure(int hours) { 
     Number_Of_Hours += hours; 
    } 

    public Worker(String _id, String _name, int _Hourly_Wage, 
        int _Number_Of_Hours) { 
     id = _id; 
     name = _name; 
     Hourly_Wage = _Hourly_Wage; 
     Number_Of_Hours = _Number_Of_Hours; 
    } 

    public void clearHour() { 
     Number_Of_Hours = 0; 
    } 

    int FinalSalary = 0; 

    public int calculateSalery(int h) { 
     int cal = 0; 
     if (h > Number_Of_Hours) { 
      cal = h - Number_Of_Hours; 
      cal = cal * ((Hourly_Wage/100) * 120); 
      FinalSalary = (Hourly_Wage * Number_Of_Hours) + cal; 
     } 

     else { 
      FinalSalary = Hourly_Wage * Number_Of_Hours; 
     } 
     return FinalSalary; 
    } 

    public String toString() { 
     String str = "id: " + id + " name: " + name + " Hourly Wage: " 
       + Hourly_Wage + " Number Of Hours: " + Number_Of_Hours 
       + " Final Salary: " + FinalSalary; 
     return str; 
    } 
} 

Klasse Abteilung

public class Department { 
    public String name; 
    public int Annual_budget; 
    public final int Max_Workers = 30; 
    private Worker[] arrWork = null; 
    private int Index; 

    public Department() { 
     arrWork = new Worker[Max_Workers]; 
     Index = 0; 
    } 

    public boolean addEmploy(String _id, String _name, int _Hourly_Wage, 
          int _Number_Of_Hours) { 
     arrWork[Index] = new Worker(_id, _name, _Hourly_Wage, _Number_Of_Hours); 
     return true; 
    } 

    int result = 0; 

    public int calculateDepartmentSalery() { 

     for (int i = 0; i < Index; i++) { 
      if (arrWork[i] != null) 
       result += arrWork[i].FinalSalary; 
     } 
     return result; 

    } 

    public String toString() { 
     String str = "calculate Department Salery: " + result; 
     return str; 
    } 
} 
+0

bitte in die Frage, was schief geht, was ist das tatsächliche Ergebnis, und was ist das erwartete Ergebnis. – SomeJavaGuy

+0

Ok geändert, danke. – scndjs

+0

Ihre Benennung ist schlecht: Klassennamen sollten mit Großbuchstaben beginnen, und Methoden und Felder sollten mit Kleinbuchstaben beginnen. Sie haben jedoch das Problem, dass 'Index' nicht um' addEmploy' erhöht wird, also immer noch '0' ist, wenn 'calculateDepartmentSalery()' aufgerufen wird und loop nichts tut. Außerdem sollten Sie das Ergebnis nicht in einem Feld speichern. Was passiert, wenn 'calculateDepartmentSalery()' zweimal aufgerufen wird? Hoppla. Lernen Sie zu debuggen, und Sie können Fehler auf diese Weise schneller finden, als eine Frage hier zu schreiben und auf Antworten zu warten. – Andreas

Antwort

0

Sie überprüfen müssen möglicherweise Basis OOP, object-oriented programming. Die in Worker und Department definierten Variablen sollten privat sein und Methoden wie getID() und setID(String ID) verwenden. Die Arbeiter sollten in einem ArrayList wie folgt gespeichert werden:

ArrayList<Worker> workers = new ArrayList<Worker>(); 
workers.add(new Worker(*input proper data*)); 

Wenn Sie planen, die Arbeitergehälter zu summieren, können Sie eine Schleife durch workers durch eine for-each Schleife:

int sum = 0; 
for(Worker w : workers){ 
sum += w.calculateSalary(w.getH());//you may need to include an "h" variable in the worker class 
} 

Auch diese Anrufe :

work1.calculateSalery(55); 
work2.calculateSalery(60); 

Sind absolut sinnlos, da Sie diese Berechnungen nirgendwo speichern. Da calculateSalery(); Rückgabetyp int ist, können Sie diese Werte in einer int Variablen speichern. Vielleicht möchten Sie jedoch double Variablentypen für Dinge wie Hourly_Wage, Number_Of_Hours, und die Methode calculateSalery();

Verwandte Themen