将多个值作为方法参数传递

Passing multiple values as method parameter

我有一个简单的程序来复制人们在餐馆吃饭和他们点的菜。

下面是我的Dinerclass,创建一个代表一个人的对象:

package dinersbill;

public class Diner {

    private String name;

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

    public String getName() {
        return name;
    }

}

接下来是我的商品 class,代表人们可能订购的食品:

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。这将如何完成?

你可以把DinerItem的关系反过来:一个Diner是由[=11=组成的]s.

例如,您可以将 ArrayList<Item> 放入您的 Diner class 中,并有一个方法可以用几道菜来初始化晚餐。

您可以在项目中使用用餐者列表

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;
    }

}

也许解决方案是重新考虑您的模型。 Item 和 Diner 之间真的存在一对多关系吗?

更自然的关系可能是颠倒它,让 Diner 在一个 List-object 中保存多个 Item。

听起来您需要一个 java 集合,而不是 Diner class 中的单个字符串。

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

但是,我敢肯定这不是您想要的效果(您希望不止一个晚餐点同样的东西,对吧?)

如果是这样,您只需为每个 Diner 实例化一个新项目。与其将 Item 分配给 Diner,为什么不将 Diner 分配给 Item?这样您就可以将同一个项目实例化给多个 Diners。

基本上,您需要引用您的 Diner class 中的某个项目,而不是您的项目 class 中的 Diner 的引用。然后你可以说

new Diner("Bob", new Item("Cheesecake", 2.50));

这将创建一个名为 "Bob" 的新晚餐,他点了一份芝士蛋糕。

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;
}

}