2017-11-24 15 views
-1

[現在の出力] [1] なぜ給与クラスが正しく出力されているのか120000/12、幹部クラスと時間クラスはスタッフテキストファイル[staff] [2]。問題UMLは次のようになります[問題UML] [3] スーパーキーワードを正しく使用しているかどうかを、時間単位とエグゼクティブクラス単位で確認しますか? ******************* *************************************************** ***********抽象継承クラス

//Driver class reads from staff.txt file  
     import java.io.File; 
      import java.util.Scanner; 
      public class StaffDemo{ 
       private static int size; 
       private static String[][] employeeInfo; 
       private static StaffMember[] staffMember; 
       public static void main(String[] args){ 
       createStaff(); 
       //System.out.println(staffMember[3].getPaid()); 
       payAll(); 
       } 

        public static void createStaff(){ 
        try{ 
         File file = new File("staff.txt"); 
         Scanner s = new Scanner(file); 
         size = Integer.parseInt(s.next()); 
         //System.out.println(size); 
         employeeInfo = new String[size][5]; 
         for(int i =0;i<size;i++){ 
         for(int j=0;j<5;j++){ 
          employeeInfo[i][j]=s.next(); 
         } 
         } 
         int i=0; 
         staffMember = new StaffMember[size]; 
         while(i<size){ 
         if(employeeInfo[i][0].equals("Salaried")){ 
          StaffMember staffSalaried = new Salaried(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4])); 
          staffSalaried.setEmployeeType(employeeInfo[i][0]); 
          staffMember[i] = staffSalaried; 
         }else if(employeeInfo[i][0].equals("Volunteer")){ 
          StaffMember staffVolunteer = new Volunteer(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));   
          staffVolunteer.setEmployeeType(employeeInfo[i][0]); 
          staffMember[i] = staffVolunteer; 
         }else if(employeeInfo[i][0].equals("Hourly")){ 
          StaffMember staffHourly = new Volunteer(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));   
          staffHourly.setEmployeeType(employeeInfo[i][0]); 
          staffMember[i] = staffHourly; 
         }else if(employeeInfo[i][0].equals("Executive")){ 
          StaffMember staffExecutive = new Volunteer(Integer.parseInt(employeeInfo[i][1]),employeeInfo[i][2],employeeInfo[i][3],Double.valueOf(employeeInfo[i][4]));   
          staffExecutive.setEmployeeType(employeeInfo[i][0]);   
          staffMember[i] = staffExecutive;   
         } 
         i++; 
         } 
        } 
        catch(Exception e){ 
         System.out.println("no file found"); 
        } 
        } 
        public static void payAll(){ 
        for(int k=0;k<size;k++) 
         System.out.println(staffMember[k]); 
        } 
       } 

    ******************************************************************************* 


     //Executive class extends Salaried, suppose to add 0.1*payRate*bonus 
      public class Executive extends Salaried{ 
       private double bonus=0; 
       private double monthlySalary; 
       public Executive(int idNumber, String firstName, String lastName, double payRate){ 
       super(idNumber,firstName,lastName, payRate); 
       this.setMonthlyRate(); 
       } 
       public void setMonthlyRate(){ 
       this.monthlySalary=super.payRate*0.1*bonus; 
       } 
       public double getMonthlyRate(){ 
       return this.monthlySalary; 
       } 
       public void addBonus(double bonus){ 
       this.bonus+=bonus; 
       } 
       public double getBonus(){ 
       return this.bonus; 
       } 
       @Override 
       public double getPaid(){ 
       return this.getMonthlyRate(); 
       } 
       @Override 
       public String toString(){ 
       return super.toString()+this.getPaid(); 
       } 
      } 

    ******************************************************************************** 

     // volunteer class prints out payrate equals zero 
     public class Volunteer extends StaffMember{ 
      private double payRate; 
      public Volunteer(int idNumber, String firstName, String lastName, double payRate){ 
      super(idNumber,firstName,lastName); 
      this.setMonthlyRate(payRate); 
      } 
      public void setMonthlyRate(double payRate){ 
      this.payRate=payRate; 
      } 
      public double getMonthlyRate(){ 
      return this.payRate; 
      } 
      @Override 
      public double getPaid(){ 
      return getMonthlyRate(); 
      } 
      public String toString(){ 
      return super.toString()+getPaid(); 
      } 
     } 

    ******************************************************************************** 
     //Hourly class extends StaffMember, it suppose to do payRate*80.00 
     public class Hourly extends StaffMember{ 
      private double payRate; 
      public Hourly(int idNumber, String firstName, String lastName, double payRate){ 
      super(idNumber,firstName,lastName); 
      this.setMonthlyRate(payRate); 
      } 
      public void setMonthlyRate(double payRate){ 
      this.payRate=payRate*80.00; 
      } 
      public double getMonthlyRate(){ 
      return this.payRate; 
      } 
      @Override 
      public double getPaid(){ 
      return getMonthlyRate(); 
      } 
      @Override 
      public String toString(){ 
      return super.toString()+getMonthlyRate(); 
      } 
     } 

    ******************************************************************************** 
     //salaried 
      public class Salaried extends StaffMember{ 
       public double payRate; 
       public Salaried(int idNumber, String firstName, String lastName, double payRate){ 
       super(idNumber, firstName, lastName); 
       this.setMonthlyRate(payRate); 
       } 
       public double getMonthlyRate(){ 
       return this.payRate; 
       } 
       public void setMonthlyRate(double payRate){ 
       this.payRate=payRate/12.00; 
       } 
       @Override 
       public double getPaid(){ 
       return getMonthlyRate(); 
       } 
       public String toString(){ 
       return super.toString()+getMonthlyRate(); 
       } 
      } 

    ******************************************************************************** 
     //StaffMember is abstract class 
     public abstract class StaffMember{ 
      private String firstName; 
      private String lastName; 
      private int idNumber; 
      private String employeeType; 

      public StaffMember(int idNumber, String firstName, String lastName){ 
      this.idNumber=idNumber; 
      this.firstName=firstName; 
      this.lastName=lastName; 
      } 
      public int getIdNumber(){ 
      return this.idNumber; 
      } 
      public void setIdNumber(int idNumber){ 
      this.idNumber=idNumber; 
      } 
      public String getFirstName(){ 
      return this.firstName; 
      } 
      public void setFirstName(String firstName){ 
      this.firstName=firstName; 
      } 
      public String getLastName(){ 
      return this.lastName; 
      } 
      public void setLastName(String lastName){ 
      this.lastName=lastName; 
      } 
      public String getEmployeeType(){ 
      return this.employeeType; 
      } 
      public void setEmployeeType(String employeeType){ 
      this.employeeType=employeeType; 
      } 
      @Override 
      public String toString(){ 
      return getFirstName()+" "+getLastName()+" ("+getEmployeeType()+"): $"; 
      } 

      public abstract double getPaid(); 
      public abstract double getMonthlyRate(); 
      public abstract void setMonthlyRate(double i); 
     } 



    [1]: https://i.stack.imgur.com/rF54p.png 
    [2]: https://i.stack.imgur.com/ohblq.png 
    [3]: https://i.stack.imgur.com/UezAe.png 
+2

多すぎるコード。問題を再現する**最小** **完全**の例を考えてみましょう。問題のあるコードのみを含み、メインメソッド、ハードコードされた値、期待される出力、実際の出力を持つべきです。 –

+0

投稿する[mcve] .. – user1803551

答えて

0

"Hourly"と "Executive"の両方がボランティアですか?他

IF(employeeInfo [I] [0] .equals( "時間別")){

StaffMember staffHourly = 新しいボランティア(...)
... ELSE

場合(employeeInfo [I] [0]).equals( "エグゼクティブ"){

StaffMember staffExecutive = 新しいボランティア(...)

関連する問題