2010-11-22 12 views
1

私は抽象クラスEmployeeを持っており、それに基づいて、私は次のサブクラスを作成しました:スーパークラス配列内にある別のオブジェクトの内部にあるオブジェクト配列にアクセスするにはどうすればよいですか?

FulltimeEmployee
PartTimeEmployee Salesman


ならびに1つのスタンドアロンクラス、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); 
///////////////// 

} 

その後、私はに応じて、セールスマンが得るボーナスを計算するためにその配列を使用彼が作る売上の量。各行は、従業員の異なるタイプ(給与=フルタイム、partt =パートタイム、販売=営業マンの)である

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; 

mainにおいて、I型Employeeの配列を作成しました。

私の問題は、従業員の配列を使って各セールスマンの注文を印刷したいということです。 は、私がこれまで行ってきたことは問題

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 ");

私は従業員のアレイ上のセールスマンオブジェクトの内部で注文アレイにアクセスするにはどうすればよいですか? 私はキャストしようとしましたが、OrdersはEmployeeのサブクラスではないため動作しません。私はそれは例えば、印刷する必要があり

、セールスマンの

受注:1注文日:セールスマン

注文番号あたり13000回の 注文:注文のジョン・光雲

合計金額: 2010年10月2日説明:機械販売注文金額:12000

注文番号:2発注日:20/2/2010説明:部品発注量:1000

+3

'Salesman'クラスの完全なリストを提供してください。 –

+0

注:コンストラクタ引数は' orders'という名前ですが、 'orders'と呼ばれます。このコードは明らかにコンパイルされません。 – pstanton

答えて

3

あなたSalesmanコンストラクタはOrder[]注文を受け付けていますが、それへの参照を保持するように(あなたがそのgetSalaryまたはコメントアウト部分で行う場合を除きます)、それはどこにも見えません。

あなたはSalesmanオブジェクトのフィールド/プロパティとして配列を参照することができますので、あなたのSalesmanコンストラクタで

this.orders = orders;

のようなものを追加する必要があります。

通常は、各フィールドはゲッター/セッターメソッドを持つことにより、Beanパターン使用する必要があります。そして、あなたのコンストラクタでsetOrders(orders);

を追加してから、デバッグ/出力コードの追加に

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

public void setOrders(Order[] orders){ 
    this.orders=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を自分で解決しようとしました。 –

+0

あなたはマスター職人でなければなりません。 – pstanton

+0

職人ではありませんが、優れたシニア情報とプロセスシステムのコンサルタントであり、多くの教育経験を持っています(犯罪を意味するものではありません)。 –

0

Employeeとそれぞれの配列を持っているとしたら10(のみ)は自分自身が販売した注文を提供するメンバーを持っているので、配列の配列で作業する必要があります。

最初の視点では、Employee配列はベクター、つまり1次元配列である可能性が高くなります。さらに、あなたのSalesmanクラスはOrderの配列を持っていて、これもベクターのようです。これが実際に得られたものであれば、Salesmanの売り上げを得るためには、Salesman.Ordersメンバーを反復するだけです。

[homework]とタグ付けされているので、私はコードを書いておきます。

はまた、ここにいくつかのヒントです:

  1. あなたは1を反復処理する方法を知っているので、あなたはすでに、Employeeの配列を反復処理。あなたはSalesmanが故に、Employeeクラスから派生Employeeは、おそらくSalesmanにキャスト可能-入力し、[あなたがSalesmanクラスのインスタンスを取得するものとなって、それがこの実際のEmployeeがそうでなければそれが必要、Salesmanであると言う

  2. nullを返す。

  3. ここでは、プロパティメソッド(gettersおよびsettersメソッド)を使用してフィールドにアクセスします。

だから、どのようにあなたのクラスの外からOrdersにアクセスできるようにし、配列として、それを公開するだろうか?

配列として公開することができた場合は、配列を繰り返し処理して各注文金額を取得し、Salesmanのインスタンスがどれくらい売れたかを計算できますか?

+0

、本当にありがとう!!!私は答えが本当に私の正午だったと思います!私はセールスマンのコンストラクタでordersオブジェクトを設定するのを忘れていました(this.orders = orderと問題を抱えていましたが、コードをもっと慎重に見れば簡単に修正できるものがありました。私の質問 – George

関連する問題