2010-11-22 62 views
1

我有一個抽象類Employee,基於這一點,我創建了以下子類:如何訪問位於超類數組內的另一個對象內部的對象數組?

FulltimeEmployee
PartTimeEmployee
Salesman

以及一個獨立的類,Orders

我使用Orders類由推銷員構造訂單發送的數組「形容推銷員」:

public Salesman(String firstname, String lastname,int code, String address, 
       String city,int tk,int phone,String email,int deptcode,int card, 
       double hours,String cat,int orderno,double salary, 
       Orders[] order){ 
super( firstname, lastname, code, address, city, tk, phone, email, deptcode, 
     card, hours, cat); 
this.orderno=orderno; 

setBaseSalary(salary); 
getSalary(orders); 
///////////////// 

} 

後來,我用數組來計算獎金推銷員,這取決於他所做的銷售額。

main,我創建Employee類型的數組:

Employee employees[] = new Employee[ 7 ]; 
    employees[ 0 ] = salary1; 
    employees[ 1 ] = salary2; 
    employees[ 2 ] = salary3; 
    employees[ 3 ] = partt1; 
    employees[ 4 ] = partt2; 
    employees[ 5 ] = sales1; 
    employees[ 6 ] = sales; 

其中每行是不同類型的僱員的(工資=專職,partt =兼職,和銷售=業務員)。

我的問題是,我想打印使用僱員數組的每個銷售員的訂單。 什麼我目前所做的就是

for (int i=5;i<employees.length;i++){ 
       System.out.printf("Orders of Salesman: %S %S", 
        employees[i].getName(),employees[i].getSurname()); 
       System.out.printf(" Total amount(money) from orders: %,.0f ", 
        employees[i].earnings()); 
       int j=0; 
       ((Salesman)employees[i]).getOrderNo(arr) ; 
       //((Orders)employees[i]).getOrderNo(); 
       System.out.printf("ordernumber: %d orderdate:%s description: %s 
        order amount(money): %,.0f\n "); 

      } 

,問題就出現在這裏:

System.out.printf("ordernumber: %d orderdate:%s description: %s order amount(money): %,.0f\n ");

如何訪問員工陣列推銷員對象內的訂單陣列? 我試過鑄造,但它不會工作,因爲訂單不是員工的子類。

我需要它來打印,例如,

訂單推銷員:1訂購日期:每個售貨員

訂單號13000個 訂單:約翰koun

訂單總額: 10/2/2010說明:機械銷售訂單金額:12000

訂單號:2訂單日期:20/2/2010說明:零件訂貨量的銷售量:1000

+3

請提供您的`Salesman`類的完整列表 – 2010-11-22 20:37:36

+0

注意,構造函數參數被命名爲`order`,但是您將其稱爲`orders`。這段代碼顯然不會編譯。 – pstanton 2010-11-22 21:00:21

回答

3

Salesman構造函數接受一個Order[]訂單,但它並不像你保持對它的引用的任何地方(除非你做,在getSalary或註釋掉部分)。

您需要在您的Salesman構造函數添加類似

this.orders = orders;

,所以你可以參照數組作爲Salesman對象的字段/屬性。

通常你應該使用Bean模式,即每個字段有一個getter/setter方法:

public Order[] getOrders(){ 
    return orders; 
} 

public void setOrders(Order[] orders){ 
    this.orders=orders; 
} 

然後在構造函數中添加setOrders(orders);

,然後在調試/輸出的代碼添加:

Salesman salesman = (Salesman) employees[i]; 
for (Order order : salesman.getOrders()) 
    System.out.println(order); // i don't know what fields order has! 
+0

雖然你的回答對我來說很好,但我會嘗試自己將OP帶到解決方案中,以便通過正常的學習過程提高他的技能,因爲問題被標記爲`[作業]`。 – 2010-11-22 20:56:54

0

如果你所說的是你有一組,並且每個Salesman(僅)有一個成員提供自己已經出售的訂單,那麼你必須使用一組數組。

在第一視圖中,您的Employee數組更有可能是一個向量,即一維數組。此外,你的Salesman類有一個Order陣列,這也似乎是一個向量。如果這是您實際得到的,則只需遍歷您的Salesman.Orders成員即可獲得Salesman所做的銷售。

由於它被標記爲[homework],我拒絕寫代碼,並給你它爲你煮熟。

另外,這裏有一些提示:

  1. 你已經通過Employee迭代一個數組,所以你知道如何通過一個迭代;

  2. 你說一個SalesmanEmployee類派生,因此使得Employee或許類型強制轉換爲Salesman,然後你將得到你的Salesman類的實例,它這個實際EmployeeSalesman,否則它應該返回null;

  3. 現在,您可以通過屬性方法(getters和setters方法)訪問您的字段;

所以,你怎麼能讓Orders訪問從你的類外,並將其作爲一個數組?

如果你已經能夠將它公開爲一個數組,你如何遍歷一個數組來獲取每個訂單的數量,以便計算出這個Salesman實例出售的數量?

相關問題