进一步了解我的问题:
我有一个问题,我正在我的Java教科书中工作,它要求我编写一个名为 GroceryList 的类,它代表从市场上购买的商品列表,还有另一个名为 GroceryItemOrder 表示购买给定数量的特定商品的请求(例如: 四个橙子单元 )。根据进一步的指示,我将开发一个测试和打印所有实现方法的结果的客户端。
免责声明:我不是要求任何人为我做这个问题。我只是想请一位导师澄清如何根据我的客户 GroceryListClient <的指令,将我的 GroceryItemOrder 类中的实例方法实现到我的 GroceryList 类中/ em>的
来自 GroceryList 类的代码:
public class GroceryList_test {
public GroceryList_test() {
GroceryItemOrder_test[] GroceryList = new GroceryItemOrder_test[10];
}
public void add(GroceryItemOrder_test item) {
GroceryItemOrder_test[] GroceryList = new GroceryItemOrder_test[10];
GroceryList[1] = item;
System.out.println(GroceryList[1]);
}
/*public double getTotalCost(GroceryItemOrder_test item) {
}*/
}
在实例方法 add(GroceryItemOrder_test item)下:
我希望这种方法每次在 GroceryListClient中指示它时,都会动态地将项目顺序从 GroceryItemOrder_test(String name,int quantity,double priceperunit)加载到数组中客户端,稍后将访问该计算机,以计算下面 TotalCost()实例方法中的总费用。
来自我的 GroceryItemOrder 类的代码:
public class GroceryItemOrder_test {
String itemID;
int NumberofItems;
double priceperunit;
public GroceryItemOrder_test(String name, int quantity, double pricePerUnit) {
this.itemID = name;
System.out.println("Item: " + itemID);
this.NumberofItems = quantity;
System.out.println("Quantity: " + NumberofItems);
this.priceperunit = pricePerUnit;
System.out.println("Price per unit: $" + priceperunit);
}
public double getCost() {
return ((NumberofItems * priceperunit) * 100.0) / 100.0;
}
public void setQuantity(int quantity) {
}
}
在公共类 public GroceryItemOrder_test(String name,int quantity,double pricePerUnit):
我希望将此方法加载到 GroceryList 类的实例方法add(GroceryItemOrder_test item)中的数组中。
来自我的 GroceryListClient 客户端的代码:
public class GroceryListClient {
public static void main(String[] args) {
GroceryList_test addorder = new GroceryList_test();
GroceryItemOrder(addorder);
}
public static void GroceryItemOrder(GroceryList_test addorder) {
GroceryItemOrder_test Oranges = new GroceryItemOrder_test("oranges", 3, 2.46);
System.out.println("Total cost of " + Oranges.itemID + " = $" + Oranges.getCost());
addorder.add(Oranges);
System.out.println();
GroceryItemOrder_test Grapes = new GroceryItemOrder_test("grapes", 15, 0.55);
System.out.println("Total cost of " + Grapes.itemID + " = $" + Grapes.getCost());
addorder.add(Grapes);
}
}
根据方法 GroceryItemOrder(GroceryList_test addorder):
GroceryItemOrder_test Oranges = new GroceryItemOrder_test("oranges", 3, 2.46);
System.out.println("Total cost of " + Oranges.itemID + " = $" + Oranges.getCost());
addorder.add(Oranges);
特别声明 addorder.add(Oranges); :
这应该将项目作为“item”指定的“对象”添加到 add(GroceryItemOrder_test item)方法下的数组中。
这些是我无法弄清楚如何执行的条件。如果可能请提供帮助。
不要建议 ArrayList ,因为我还没有达到这个目标,经过进一步的研究,我认为它不会轻易达到这个目的。
答案 0 :(得分:0)
如果我理解您的意思,您希望GroceryList
存储不同的GroceryItemOrder
个对象。
您已接近在代码中使用解决方案了。不过,请看这里:
public void add(GroceryItemOrder_test item) {
GroceryItemOrder_test[] GroceryList = new GroceryItemOrder_test[10];
GroceryList[1] = item;
System.out.println(GroceryList[1]);
}
如果您追踪其工作原理,那么每次输入add()
方法时,都会创建一个包含十个空元素的新数组。当方法退出时,您将立即丢失对此的所有引用,因为它将是out of scope并最终被垃圾收集。
要解决此问题,您需要使用保留在范围内的变量。我建议为GroceryList
类设置一个实例变量,如下所示:
public class GroceryList {
private GroceryItemOrder[] list = null;
public GroceryList() {
list = new GroceryItemOrder[10];
}
public void add(GroceryItemOrder item) {
for(int i=0; i<list.length; i++) {
if(list[i] == null) {
list[i] = item;
System.out.println(item);
break;
}
}
}
}
现在,在这个add()
方法中,我们只查看已存在且持久的list
变量,而不是创建一个新变量。我们遍历它以找到可用的插槽(如果有的话),然后执行其余的处理。 break
语句是必需的,因此列表中的每个项目都不会设置为您要添加的项目。
然后,您的GroceryClient
班可以随意创建GroceryItemOrder
个对象,并使用add()
中的GroceryList
方法(因为它是public
)。
请注意,使用ArrayList
确实会更容易,这与您在帖子的结束评论中所说的相反。