2016-10-10 1 views
2

私は、例えばArrayListという名前のArrayListを持っています。冷蔵庫オブジェクトのJavaの新しいArrayList myList

List<Food> fridge = new ArrayList<Food>(); 

簡単な説明: 私は私の冷蔵庫を維持したいので、私は別々の引き出しの中に私の食べ物を入れたい組織しました。 私はすでにクラスミート、フルーツ、パンを持っています。

私が苦労している点は、異なる引き出しを描く新しいArrayListを作成することです。

私の目標は、このリストの子供として親リストと肉、果物、パンをリストすることです。

冷蔵庫(親)

---肉(子)

---果物(子供)

---パン(子供)

ドゥどのようにこれを実現するためのアイデアがありますか? 私は任意のヘルプ

EDITのためのうれしい: 私はthesublistsに追加するオブジェクトは、このような文字列obj.nameなどの情報が含まれています。ダブルobj.weight; double obj.price;私は、サブリストにオブジェクトを追加し、サブリストをもう一度読むことができます。

+1

食べ物の種類ごとに 'ArrayList'を作成し、' fridge'に 'ArrayList'の' ArrayList'を作ることができます。 –

+0

@SusannahPottsが述べたように、あなたの子供は冷蔵庫の中にあるArrayListsでなければなりません –

+1

食べ物のタイプごとに 'ArrayList'を作成し、それらのArrayListsを含む各タイプの食べ物のための' TreeMap'を作成する必要があります。 'Map > fridge =新しいTreeMap <>()' – coladict

答えて

6

"fridge"はそれ自身のより複雑な状態と動作を持つ必要があるため、単純なArrayListであってはなりません。代わりに、それは本格的なクラスでなければならず、3つ(またはそれ以上)のArrayLists:meatList、fruitList、およびbreadList、および各リストにアイテムを入れるメソッド、アイテムを取得するメソッド、および印刷するメソッドを含める必要がありますまたは項目を表示する。

同様に、食べ物には肉、果物、およびパンのサブクラスを含めることができます(グッドハウスキーピングでは、冷蔵庫にパンを入れるべきではありませんが、結露やかゆみの原因となります)。

+1

クラスは、そのコンテンツを順番に反復する方法があれば' List'を、そうでなければそのコンテンツを反復する方法があれば 'Set'を実装できることに注意してください – Aaron

+1

@Aaron以上:Iterableを実装する - はるかに単純なインターフェイスと、すべてのコンテンツを繰り返し処理できるインターフェイス。 –

+0

あなたが正しいと思われます。それはより適切です。 – Aaron

0

"メンタル"モデルが間違っています。 冷蔵庫であり、他のリストを含むリストよりもはるかにです。

キッチンに「本当の冷蔵庫」があると想像してください。いくつかのリスト(コンテンツによってソートされている)よりもはるかに多くがあります!

したがって、まずあなたの精神モデル内の "冷蔵庫"の目的が何であるかを自分自身で把握してください。そのクラスのユーザーには、どのような動作(インターフェイス)が提供されるべきですか?

例:冷蔵庫は内容を「タイプ」で知っていることは本当に重要ですか?または、その冷蔵庫のエントリが物理的にどのように注文されているかが重要ですか?

ホバークラフトからの優れた答えの他に、を使用している用語がプログラム内でを意味するものを実際に定義するためにさらに後退したいと思うかもしれません!

+0

あなたの答えが正しいので、誰があなたに投票したか分かりません。 1 + –

+0

初心者に「あなたは間違っている」と教えずに、それを正しく行う方法は教えてもらえません。 – coladict

+0

@coladictそして、何を推測しますか:私はすでにアップデートでそれに取り組んでいました。 – GhostCat

1

私はあなたが望むものを100%得ることはできませんが、私はあなたの食物データを保存したいと思います。

1。すべての内部リストが引き出しを提示

ArrayList<ArrayList<Food>> fridge; 

:) ちょうどリストのリストを作ります。肉、果物などは食品のサブクラスになります。

2) を引き出し、あなたが簡単に「引き出し」コンテンツを取得することができますして

HashMap<String, ArrayList<Food>> fridge; 

の「名前」としてキーで地図を作ります。しかし、それは上記に大きく変わらない。

3)

すべてのものを保存するFridgeクラスを作成します。そして、冷蔵庫は食品だけでなく、物事を保存することができるものを定義するインタフェースを作ることができます。

interface Storable{ 
    String getName(); int getId(); String getType(); void use(); 
    }....//whatever everything which will be stored has. 
class Fridge{ 
    HashMap<String, ArrayList<Storable>> contents; 
    void add(Storable food){ 
     this.contents.put(food.getType, food); //or instead of #getType use the class of the food. 
    } 

してから食品、肉、など:

class Food implements Storable{ 
    //implement the inherited Methods 
} 

その後、再度、各タイプのクラス(肉、パンなど)を作るか、単に食品ANに作るようないくつかの選択肢を持っていますそれが何であるかを記述するフィールド "タイプ"。あなたの「精神的なモデル」に大きく依存します。

関連する問題