この演習では、何か助けが必要です。Javaクラス、オブジェクトの新しい配列を取得する
私はすべての従業員の給料を一緒にプリントしたいが、それを働かせることはできない。
私は新しい部門を作成するときに、私はオブジェクト(ワーカー)の名前だけを書いている作業を受け取り、情報を再入力しないことを望みます。
実際の結果(それが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
期待される結果:一緒にすべての労働者の給与の計算。
メインクラス
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());
}
}
クラスワーカー
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;
}
}
クラス部門
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;
}
}
とすると、何が問題になるのか、実際の結果は何か、期待される結果はどうかご質問ください。 – SomeJavaGuy
変更されました。ありがとうございます。 – scndjs
あなたの命名は悪いです:クラス名は大文字で始まり、メソッドとフィールドは小文字で始める必要があります。しかし、問題は、 'Index'は' addEmploy'によってインクリメントされないので、 'calculateDepartmentSalery()'が呼び出されたときに '0'であり、ループは何もしません。また、フィールドに結果を格納しないでください。 'calculateDepartmentSalery()'が2回呼び出されるとどうなりますか?おっとっと。デバッグする方法を学ぶと、ここで質問を書いて答えを待つよりも早くこのようなエラーを見つけることができます。 – Andreas