2016-05-18 18 views
-5

この演習では、何か助けが必要です。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; 
    } 
} 
+0

とすると、何が問題になるのか、実際の結果は何か、期待される結果はどうかご質問ください。 – SomeJavaGuy

+0

変更されました。ありがとうございます。 – scndjs

+0

あなたの命名は悪いです:クラス名は大文字で始まり、メソッドとフィールドは小文字で始める必要があります。しかし、問題は、 'Index'は' addEmploy'によってインクリメントされないので、 'calculateDepartmentSalery()'が呼び出されたときに '0'であり、ループは何もしません。また、フィールドに結果を格納しないでください。 'calculateDepartmentSalery()'が2回呼び出されるとどうなりますか?おっとっと。デバッグする方法を学ぶと、ここで質問を書いて答えを待つよりも早くこのようなエラーを見つけることができます。 – Andreas

答えて

0

あなたは検討する必要があるかもしれません基本OOP,object-oriented programmingWorkerDepartmentで定義された変数は、getID()setID(String ID)などのメソッドを使用して非公開にする必要があります。労働者は、このようArrayListに格納する必要があります。

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

あなたは労働者の給与を合計する予定がある場合は、あなたかもしれfor-eachループ使ってworkersをループ:

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

また、これらの呼び出しを:

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

これらの計算をどこにも保存していないため、絶対に無意味です。 calculateSalery();int型を返すので、これらの値をint変数に格納することができます。ただし、Hourly_Wage, Number_Of_Hours,などの変数タイプをdouble、方法をcalculateSalery();

関連する問題