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;
}
}
bitte in die Frage, was schief geht, was ist das tatsächliche Ergebnis, und was ist das erwartete Ergebnis. – SomeJavaGuy
Ok geändert, danke. – scndjs
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