2016-11-05 34 views
0

我有一個讀取各種員工信息的文本文件。 我已經創建了兩個基於Employee對象年的數組列表。員工有兩個子類,推銷員和執行者。我不知道我應該怎麼用逗號,如果有兩個子類拆分它,因爲我不能調用超類不確定是否應該拆分我的子類

這裏的員工類

public class Employee 
{ 
private String name; 
private double monthlySalary; 

public Employee(String line) 
{ 
    String[]split=line.split(","); 
    name=split[0]; 
    monthlySalary=Double.parseDouble(split[1]); 
} 



public String getName() { 
    return name; 
} 



public void setName(String name) { 
    this.name = name; 
} 



public double getMonthlySalary() { 
    return monthlySalary; 
} 



public void setMonthlySalary(double monthlySalary) { 
    this.monthlySalary = monthlySalary; 
} 



public double annualSalary() 
{ 
    return monthlySalary*12; 
} 


public String toString() 
{ 
    String str; 
    str="Name: "+name; 
    str+="\nMonthly Salary: "+monthlySalary; 
    return str; 
} 
} 

推銷員類

public class Salesman extends Employee 
{ 
private double annualSales; 

public Salesman(String name, double monthlySalary, double annualSales) 
{ 
    super(name,monthlySalary); 
    this.annualSales=annualSales; 
} 



public double getAnnualSales() { 
    return annualSales; 
} 



public void setAnnualSales(double annualSales) { 
    this.annualSales = annualSales; 
} 



public double annualSalary() 
{ 
    double commision=annualSales*0.02; 
    if (commision>20000) 
    { 
     commision=20000; 
    } 
    double totalSalary=super.annualSalary()+commision; 
    return totalSalary; 
} 


public String toString() 
{ 
    return super.toString()+"\nAnnual Sales: "+annualSales; 
} 
} 

執行級

public class Executive extends Employee 
{ 
private double stockPrice; 

public Executive(String name, double monthlySalary, double stockPrice) 
{ 
    super(name,monthlySalary); 
    this.stockPrice=stockPrice; 
} 


public double getStockPrice() { 
    return stockPrice; 
} 


public void setStockPrice(double stockPrice) { 
    this.stockPrice = stockPrice; 
} 


public double annualSalary() 
{ 
    double bonus=0; 
    if(stockPrice>50) 
    { 
     bonus=30000; 
    } 
    double totalSalary=super.annualSalary()+bonus; 
    return totalSalary; 
} 


public String toString() 
{ 
    return super.toString()+"\nStock Price: "+stockPrice; 
} 
} 

而駕駛員級別

import java.io.*; 
import java.util.*; 
public class employeeDriver 
{ 
public static void main(String[] args) 
{ 
    String input; 
    Scanner readInput=null; 
    Scanner readFile = null; 

    try 
    { 
     readFile=new Scanner(new File("C:\\mywork\tester.txt")); 
    } 
    catch(FileNotFoundException e) 
    { 
     System.out.println("The file can't be opened"); 
     System.exit(0); 
    } 
    List<Employee> firstList= new ArrayList<>(); 
    List<Employee> secondList= new ArrayList<>(); 


    while(readFile.hasNextLine()) 
    { 
     //To be inserted 
    } 
} 

} 
+0

你的問題不清楚,請你詳細說明一下? –

+0

對不起。我想知道是否應該爲所有三個類使用split方法,或者只爲超類使用split方法。我也想知道如果我仍然需要爲我的子類構造函數調用超類。 – Matt

回答

0

分裂法你的意思是解析該文件的東西,我覺得你應該把這個登錄另一個類,什麼都沒有做員工。

這可能是類似ParseEmployeeFile或ScanEmpoyeeFile,具有方法解析()掃描()

此方法應返回標準記錄,列表或地圖,取決於您的需求。

從這個記錄你應該能夠創建適當的員工。

要做到這一點,您需要所謂的工廠類。

這是一個包含創建適當的Employee子類對象的邏輯的類。

例如:

class EmployeeFactory { 

    public static Employee create(Record record) { 

     if (record.get("annualSales") != null) { 
      return new Salesman(record.get("name"), 
           record.get("monthlySalary"), 
           record.get("annualSales")); 
     } 

     if (record.get("stockPrice") != null) { 
      return new Executive(record.get("name"), 
           record.get("monthlySalary"), 
           record.get("stockPrice")); 
     } 


     return new Employee(record.get("name"), 
          record.get("monthlySalary")); 
    } 
} 

根據需要這可以被改善。

+0

事情是這是一個班級的任務,我們只需要寫四個班級,並根據員工加入的年份將數據存儲在兩個數組中 – Matt

+0

@Matt我非常懷疑您的老師會告訴您如果你真的去了一個額外的步驟,你做了一個糟糕的工作。 –

+0

@Matt沒問題,使用Factory方法,而不是類。您可以將該方法作爲靜態方法放在Employee超類中。對於解析器部分,您可以在主類中實現此方法。當然Record可以是List或Map,不需要特定的類型。 –

0

我猜輸入的文本文件中包含行,每個行都包含一個僱員與逗號連接的信息,如csv文件。

在我看來,你不應該在僱員及其子類代碼中使用String#split()。在閱讀成功完成的文件後,將每行分割爲每個屬性(如name和monthlySalary),然後將它們傳遞給Employee或其子類的構造函數。

通過明確區分獲取文件的信息和製作Employee對象,Employee類變成了robuster。例如,請假設信息創建來自其他格式(如xml文件)的Employee對象?如果您在Employee的構造函數中調用String#split(),則無法輕鬆應對!

相關問題