1

(我使用的是 Java,因此添加了“Java”标签,以防它影响任何答案,但有些人可能会认为该标签是不必要的。)

考虑以下:

我有一个阳台/阳台以图形方式进行规划。作为最终计划的一部分,我需要列出建造阳台所需的所有材料。为了简化计算过程,我将阳台分成不同的部分

甲板上方- 涉及塑料围栏组件和固定件(即螺钉、螺栓)
甲板下方- 涉及木材副框架和更多固定件。

...加上其他我不会深入探讨的内容。


为了争论:由于我们提供不同的围栏设计,有 100 种不同的库存商品可供选择。每个项目都有自己的类别,包括尺寸、颜色、数量及其 ID 参考等信息。

我想要做的是创建每个部分所需的修复列表,并将它们全部添加到一个最终列表中,没有任何重复。
最后的想法是在已处理的计划旁边显示项目名称和数量。


例如:

第 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 节 = {完整的材料清单}


我尝试过/考虑过的:

我上面提到的所有螺钉都有自己的类,并扩展了超类“紧固件”。上面提到的每个部分都有一个变量:

ArrayList<Fasteners>

所以当我计算时,我可以将螺丝添加到这个变量中。一旦每个部分计算出它需要多少个紧固件,我就会将它们一起添加。

我考虑在“Fasteners”超类中创建一个“add(Fixings)”方法,它将所有重复的项目添加在一起。但是因为有 100 个项目,我认为编码效率不会很高,并且怀疑有更好的方法来利用我在这里设置的多态性。任何在线参考或提示都会有所帮助,非常感谢。

4

1 回答 1

1

这里有一个建议:

创建一个名为 FastenerType 的枚举,然后使用 anEnumMap<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 回答