2015-02-24 45 views
-2

我有一個簡單的程序來複制在餐廳吃飯的人以及他們訂購的物品。將多個值作爲方法參數傳遞

以下是我的晚餐類,創建一個對象,表示一個人:

package dinersbill; 

public class Diner { 

    private String name; 

    public Diner(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

} 

接下來是我的項目類,佔食物的人可能會下令:

package dinersbill; 

public class Item { 

    String name; 
    double price; 
    Diner buyer; 

    public Item(String name, double price, Diner buyer) { 
     this.name = name; 
     this.price = price; 
     this.buyer = buyer; 
    } 

} 

我想有該程序使項目可以分配給多個Diner,如果用戶希望的話。這將如何完成?

+0

您可以使用地圖<項,列表> – deanosaur 2015-02-24 21:22:42

+0

您可以更改標題,或問題只是有一種方法需要一個'名單'參數? – 2015-02-24 21:27:41

回答

1

您可以扭轉乾坤reationship DinerItem之間的另一種方式:一個DinerItem秒。

例如,您可以將ArrayList<Item>放入您的Diner類中,並有一種方法可以用幾道菜初始化餐館。

0

你可以用食客的列表中的項目

public class Item { 

    String name; 
    double price; 
    List<Diner> buyers; 

    public Item(String name, double price, List<Diner> buyers) { 
     this.name = name; 
     this.price = price; 
     this.buyers = buyers; 
    } 

    //You can still have another constructor for a single Diner like this 
    public Item(String name, double price, Diner diner) { 
     this.name = name; 
     this.price = price; 
     ArrayList<Diner> diners = new ArrayList<Diner>(); 
     diners.add(diner); 
     this.buyers = diners; 
    } 

} 
0

也許解決辦法是重新考慮你的模型中。 Item和Diner之間真的有一對多的關係嗎?

一個更自然的關係可能會扭轉它,讓讓晚餐在列表對象中持有幾個項目。

0

這聽起來像你需要一個Java集合,而不是你的Diner類中的單個字符串。

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

不過,我敢肯定這是不是你要的效果(你想有一個以上的晚餐爲了同樣的事情,對不對?)

如果是這樣,你只需要爲每個Diner實例化一個新項目。爲什麼不讓餐具分配給該物品,而不是將該物品分配給餐廳?這樣你可以將同一個物品實例化爲多個Diners。

基本上,您希望在您的Diner類中引用Item,但不在Item類中引用Diner。那麼你可以說

新晚餐(「鮑勃」,新項目(「芝士蛋糕」,2.50));

這將創建一個名爲「Bob」的新Diner,他已經訂購了一個芝士蛋糕。

public class Diner { 

    private String name; 
    private Item item; 

public Diner(String name, Item item) { 
    this.name = name; 
    this.item = item; 
} 

public String getName() { 
    return name; 
} 

}