将多个值作为方法参数传递
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。这将如何完成?
你可以把Diner
和Item
的关系反过来:一个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;
}
}
我有一个简单的程序来复制人们在餐馆吃饭和他们点的菜。
下面是我的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。这将如何完成?
你可以把Diner
和Item
的关系反过来:一个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;
}
}