1

(私はJavaを使用しているため、回答に影響を与える場合に備えて「Java」タグを追加しましたが、タグが不要であると主張する人もいます。)

次の点を考慮してください。

グラフィカルに計画するベランダ/バルコニーがあります。最終計画の一環として、ベランダの建設に必要な材料をリストアップする必要があります. 計算プロセスを簡素化するために、ベランダをさまざまなセクションに分割しました。

デッキの上- プラスチックフェンシングのコンポーネントと固定具 (ネジ、ボルトなど)が含まれます。
デッキの下- 木材のサブフレームとその他の固定具が含まれます。

...さらに、詳しくは説明しません。


議論のために:私たちが提供するフェンシングのデザインが異なるため、100種類の在庫アイテムが利用可能です. 各アイテムには、寸法、色、数量、ID 参照などの情報を含む独自のクラスがあります。

私がやりたいのは、各セクションに必要な修正のリストを作成し、それらすべてを重複することなく 1 つの最終的なリストに追加することです。
最後のアイデアは、処理された計画の横にアイテム名と数量を表示することです。


たとえば、次のようになります。

セクション 1に必要なもの:
- 25 x ネジ A
- 15 x ネジ B
- 5 x ネジ C

セクション 2に必要なもの:
- 25 x ネジ A
- 15 x ネジ B
- 5 x ネジ F

セクション 3に必要なもの:
- 45 x スクリュー B
- 50 x スクリュー C
- 24 x スクリュー G

合計リスト
セクション 1 + セクション 2 + セクション 3 = {資料の完全なリスト}


私が試したこと/考えたこと:

上で述べたすべてのねじには独自のクラスがあり、スーパー クラス「Fasteners」を拡張します。上記の各セクションには変数があります。

ArrayList<Fasteners>

私が計算しているように、この変数にネジを追加できます。各セクションで必要なファスナーの数を計算したら、それらをまとめて追加します。

重複したアイテムを一緒に追加する「Fasteners」スーパークラスで「add(Fixings)」メソッドを作成することを検討しました。しかし、100 個のアイテムがあるため、コーディングはあまり効率的ではないと考え、ここで設定したポリモーフィズムを利用するより良い方法があるのではないかと疑っています。オンラインの参照やヒントは役に立ち、非常に高く評価されます。

4

1 に答える 1

1

ここに提案があります:

FastenerType という列挙型を作成し、 を使用しEnumMap<FastenerType, AtomicInteger>てファスナーを保持します。それをバッグと呼びましょう。

次に、次のようなことを行います

public class FastenerBag {

  private Map<FastenerType, AtomicInteger> fasteners = new EnumMap<FastenerType, AtomicInteger>(FastenerType.map);

  FastenerBag(){
    // init your ints to zero
  }

  public void addFastenersFor(VerandaPart part){
    for (FastenerType type : FastenerType.values()){
      fasteners.get(type).addAndGet(part.getRequiredFasteners().get(type));
    }
  }

}

パフォーマンスについてあまり心配しないでください。まず、それを機能させます。次に、読み取り可能 (リファクタリング) にしてから最適化します。

于 2013-02-06T16:13:42.220 に答える