2011-11-14 31 views
0

我正在編寫一個簡單的程序來列出公司名稱和人員在JAVA中的名稱。動態創建對象。回到基礎知識

我想動態地創建對象。以下是代碼

public class EmployeeRecord { 

/** 
* @param args 
*/ 
String company, name; 
int employee; 
public String input; 
public static BufferedReader br; 
public int iE; 
public static String numberOfCompanies; 
String nameOfCompany;*/ 

public void company(String input) { 
    // TODO Auto-generated method stub 

    nameOfCompany = input; 
} 

public void employee(String employeeNumber) { 
    // TODO Auto-generated method stub 
    iE = Integer.parseInt(employeeNumber); 
}*/ 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    EmployeeRecord qw = new EmployeeRecord(); 
    try { 
     br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter number of companies: "); 
     numberOfCompanies = br.readLine(); 
     int G = Integer.parseInt(numberOfCompanies); 

     for (int i = 1; i <= G; i++) { 

      System.out.println("Enter name of the company: "); 
      String company = br.readLine(); 
      qw.company(company); 
      System.out.println("Enter Number of employees: "); 
      String employeeNumber = br.readLine(); 
      qw.employee(employeeNumber); 

     } 

     for (int i = 1; i <= G; i++) { 

      qw.sortCompanySummary(); 
     } 
    } catch (IOException io) { 
     io.printStackTrace(); 
    } 

} 

public void companySummary() { 

    System.out.println("Number of companies: " + numberOfCompanies); 
    System.out.println("Name of company: "+nameOfCompany); 
    System.out.println("Number of employees: "+iE); 


} 

} 

我想在這裏做的是動態創建EmployeeRecord類的單獨實例。例如

EmployeeRecord qw = new EmployeeRecord(); 
EmployeeRecord we = new EmployeeRecord(); 
+0

......所以有什麼問題了嗎?這不是一個問題。調用new會創建單獨的實例。另外,這是一個OOP程序的非常程序化的代碼。考慮閱讀Head First Java,然後是Head First Object Oriented Analysis and Design,然後是Clean Code。 –

+0

我假設你要做的是創建一個僱員對象,他擁有一個id,用戶輸入填充數據,然後將其添加到公司對象中的員工列表中,該公司內部有一個名稱,子公司,以及員工名單。這不是你如何做到的。您可以通過在循環中實例化新的EmployeeRecords並將它們傳遞給各個地方來破解當前您的工作,但這在方法上基本上是錯誤的。 –

回答

2

首先,您需要從控制代碼中分離出目標代碼。

其次,你需要某種集合或數組來保存你的對象。

這裏是你的代碼應該是什麼樣子的想法:

public class UI{ // <---- this class will control the flow of your program 
    public static void main(String[] args){ 
     private List<Company> company; // <---- this Collection object holds many Company objects 
     ... 
     for(int i=0;i<company.size();i++){ 
      Company c = new Company(); 
      c.setName(br.readLine()); 
      List<Employee> employee = new ArrayList<Employee>(); 
      ... 
      for(int j=0;j<employee.size();j++){ 
       Employee e = new Employee(); 
       e.setName(br.readLine()); 
       ... 
       employee.add(e); 
      } 
      c.setEmployee(employee); 
      company.add(c); 
     } 
    } 
} 

public class Company{ // <---- this class will represent the companies 
    private List<Employee> employee; 
    private String name; 
    public void setEmployee(List<Employee> employee){ 
     this.employee = employee; 
    } 
    .... 
} 

public class Employee{ // <----- this class will represent the employees 
    private String name; 
    private int empNo; 
    public int getEmpNo(){ 
     return empNo; 
    } 
    ... 
} 
2

我沒有正確理解的問題,而是通過代碼看,我相信你需要在一個循環中創建對象,你正在輸入來自用戶。這是你需要做的:

ArrayList<EmployeeRecord> qwList = new ArrayList<EmployeeRecord>(); 

聲明列表之前要求輸入用戶。 現在在循環內創建對象,爲它們賦值並將這些對象添加到列表中。這是你可以將列表

for (int i = 1; i <= G; i++) { 

     EmployeeRecord qw = new EmployeeRecord(); 
     System.out.println("Enter name of the company: "); 
     String company = br.readLine(); 
     qw.company(company); 
     System.out.println("Enter Number of employees: "); 
     String employeeNumber = br.readLine(); 
     qw.employee(employeeNumber); 
     qwList.add(qw); 

    } 

對於每一個公司一個新的對象已經被插入在列表裏面做什麼。現在你可以用這個列表來做任何你想做的事情。打印所有記錄或對其進行分類。

+1

只需提及 - 'qw.employee(employeeNumber);'和'qw.company(company);'應該命名爲'setEmployee()'和'qw.setCompany(company);'因爲這個方法**正在設置* *公司和empolyee – dantuch