2017-08-02 3 views
0

に表としてのArrayListをプリントアウト: -トラブル私は、次の形式である必要があり、ファイルの各行を読み込むしようとしていますコンソール

name type hours wage salary 

そして個々のフィールドにアップラインを分割して行います必要な変換(Stringからintまたはdoubleへの変換)。次に、static factoryメソッドを使用してSalariedEmployee/HourlyEmployeeオブジェクトを作成し、ArrayListに追加します。

私は従業員のリストをループし、各従業員の名前、タイプ、時間、および総賃金を列挙したテーブルをコンソールに出力します。各列は整列する必要があります。文字列 - 左揃え、数字 - 右揃え。すべてのマネーコラムはセントの2つのポジションを持つ必要があります。それから私は、従業員の総賃金を計算するためにtotalPayメソッドを呼び出す必要があります。私はまた、全従業員の総賃金の総額を維持し、一番下の別の行にそれを表示したいと考えています。列がヘッダーと揃っていることを確認します。私は、System.out.printfを使用して行をフォーマットして表示したいと考えています。

問題は、私は繰り返し、従業員のリストを印刷しますが、エラーに実行しようとしたある

private static final String fileName = "input.txt"; 

public static void main(String[] args) { 

    List<Employee> employees = new ArrayList<>(); // 
    String line = null; 
    BufferedReader reader = null; 

    try{ 
     reader = new BufferedReader(new FileReader(new File(fileName))); 

     while((line = reader.readLine()) != null){ 
      String[] information = line.split("\\s+"); 
      String name = information[0]; 
      String type = information[1]; 
      int hours; 
      hours = Integer.parseInt(information[2]); 
      double wage = Double.parseDouble(information[3]); 
      double salary = Double.parseDouble(information[4]); 

      employees.add(Employee.factory(name, type, hours, wage, salary)); 

      } 
     reader.close(); 

    } catch (IOException ex) { 
     System.out.println("Command-line argument is missing"); 
     System.exit(1); 
    } 

    int size = employees.size(); 

    System.out.println("Name Type Hours Total Pay"); 
    for(int i =0; i < size; i++){ 
     System.out.println(employees.getName() + " " + 
     employees.getType() + " " + employees.getHoursWorked() + " " 
     Employee.totalPay()); 
    } 
} 

マイスーパー従業員:

public abstract class Employee{ 
    protected String name; 
    protected int hours; 

    public String getName(){ 
     return name; 
    } 
    public int getHours(){ 
     return hours; 
    } 
    public abstract String getType(); 

    public Employee(String name, int hours){ 
     this.name = name; 
     this.hours = hours; 
    } 

    public abstract double totalPay(); 

    public static Employee factory(String name, String type, int hours, double 
     wage, double salary){ 
     if(type.equals("Salaried") || type.equals("SALARIED") || 
      type.equals("salaried")){ 
      Employee object = new SalariedEmployee(name, hours, (int)salary); 
       return object; 
     }else if(type.equals("Hourly") || type.equals("HOURLY") || 
      type.equals("hourly")){ 
      Employee object = new HourlyEmployee(name, hours, (int)wage); 
       return object; 
     }else{ 
      return null; 
     } 

    } 

私のサブクラスHourlyEmployee:

public class HourlyEmployee extends Employee { 

    private double wage; // wage per hour 
    private double hoursWorked; // hours worked for week 
    private int workedHours = (int)hoursWorked; 
    public HourlyEmployee(String name, double hourlyWage, int workedHours){ 

    super(name, workedHours); 
    setWage(hourlyWage); // validate hourly wage 
    setHours(workedHours); // validate hours worked 
    } 

    public void setWage(double hourlyWage) 
    { 
     if (hourlyWage >= 0.0) 
      wage = hourlyWage; 
     else 
      throw new IllegalArgumentException("Hourly wage must be >= 0.0"); 
    } 

    public double getWage() 
    { 
     return wage; 
    } 

    public void setHours(double hoursWorked) 
    { 
     if ((hoursWorked >= 0.0) && (hoursWorked <= 168.0)) 
      this.hoursWorked = hoursWorked; 
     else 
      throw new IllegalArgumentException("Hours worked must be >= 0.0 and 
      <= 168.0"); 
     } 

    public double getHoursWorked() 
    { 
     return hoursWorked; 
    } 
    @Override                
    public String getType(){ 
     return "Hourly"; 
    }  
    @Override                
    public double totalPay(){ 
     return getWage() * getHours(); 
    } 
} 

私のサブクラスSalariedEmployee:

public class SalariedEmployee extends Employee { 
    private double salary; // wage per year 
    private double hoursWorked; // hours worked for week 
    private int workedHours = (int)hoursWorked; 
    public SalariedEmployee(String name, double salary, int workedHours){ 
    super(name, workedHours); 
    setSalary(salary); // validate hourly wage 
    setHours(workedHours); // validate hours worked 
    } 

    public void setSalary(double employeeSalary) 
    { 
     if (salary >= 0.0) 
      salary = employeeSalary; 
     else 
      throw new IllegalArgumentException("Salary must be >= 0.0"); 
    } 

    public double getSalary() 
    { 
     return salary; 
    } 

    public void setHours(double hoursWorked) 
    { 
     this.hoursWorked = hoursWorked; 

    } 

    public double getHoursWorked() 
    { 
     return hoursWorked; 
    } 

    @Override 
    public String getType() { 
     return "Salaried"; 
    } 

    @Override 
    public double totalPay() { 
     return (getSalary())/52; 
    } 

} 

答えて

2

あなたのArrayListには文字列を保持するために定義されています

List<String> employees = new ArrayList<>(); 

そして、あなたのファクトリメソッドは、従業員を返します。

public static Employee factory(String name, String type, int hours, double 
    wage, double salary) 

そこであなたに、Employee型のオブジェクトを追加することはできません文字列のArrayListあなたはこれを修正したい場合は、Employee型のオブジェクトを保持するために、あなたのArrayListを変更します。

List<Employee> employees = new ArrayList<>(); 
0

はあなたのメインに変更してみてください:

List<String> employees = new ArrayList<>(); 

List<Employee> employees = new ArrayList<>(); 
関連する問題