我已经设置了一个基本上是餐厅模型的 Java 作业。除了最困难的部分,我大部分都完成了。它基本上是处理数组和对象;有几个部分我不确定。我已经完成了实现 ArrayList 和另一个使用 Map/HashMap 的类。
这是我到目前为止所拥有的:
package restaurant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ArrayOrder implements Order {
Product order[];
public ArrayOrder() {
this.order = new Product[1000];
}
public Iterator<Product> iterator() {
}
public void addItem(Product product, int quantity) {
/*for(int i = 0; i < quantity; i++)
{
this.order[i] = product; // WRONG CODE
}*/
}
public void removeItem(Product product) {
}
public int numberOfItems() {
int length = 0;
for(int i = 0; i < this.order.length; i++){
if(this.order[i] != null) {
length++;
}
}
return length;
}
public int totalCost() {
int resultcost = 0;
for(int i = 0; i < this.order.length; i++) {
if(this.order[i] != null) {
resultcost += this.order[i].getCost();
}
}
return resultcost;
}
public String toString() {
return Arrays.toString(this.order);
}
public int hashCode() {
}
public boolean equals() {
}
}
我读过你不能制作一个未定义长度的数组,但我不确定如何处理这个问题;如果我将数组初始化为一个特定的数字,则可能会发生错误。假设我将数组初始化为 [10] 并且用户添加了 20 个产品,它将出错。
第二个问题是addItem函数;我知道我在这里写的逻辑的问题是,要写入产品的数组的索引只会和数量一样大,所以数量的数组索引是产品被写入的位置;不搜索“this.order”并查找 NULL 数组值并按数量参数指定的次数写入产品。我真的不知道该去哪里。
下一个问题是 removeItem 函数,我想它使用与 addItem 类似的逻辑。我没有在这里写任何东西,因为我的尝试是错误的,我无法让 addItem 函数开始工作,所以我离开了这个。
最后一个问题是 toString 方法。toString 方法获取定义的整个数组(SAY this.order = new Product[10]),我真的不希望它这样做。
例如:
//int id, String name, String description, int cost, int serves
Starter s = new Starter(25, "Salad", "A traditional English salad", 750, 1);
Order o3 = new ArrayOrder();
o3.addItem(s, 2);
toString
该方法产生:
[Salad - A traditional English salad (serves 1) $7.50, Salad - A traditional English salad (serves 1) $7.50, null, null, null, null, null, null, null, null]
我希望它在 null、null、null 等之前停止。但它包含整个数组,其中 8 个是 null 值;我不确定如何解决这个问题。无论如何在数组周围并定义它的长度;在上面的示例中,我只添加了 2 个项目,但我声明了一个长度为 [10] 的数组;我怎么知道定义数组的长度?如果用户在上面的示例中添加了 20 个启动器,程序将崩溃......
numberOfItems 和 totalCost 函数在我使用 main 方法测试它们时起作用。
任何能指引我正确方向的指导将不胜感激。谢谢,
编辑:我想我有点不清楚;要求是我要基于 UML 图创建几个类。在此我必须创建 3 个类,它们都实现了 Order 接口。这三个类是(ListOrder、ArrayOrder、MapOrder)。我已经完成了 MapOrder 和 ListOrder,但我被困在 ArrayOrder 上。
这是我的 ArrayList 类:
package restaurant;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListOrder implements Order{
private List<Product> order;
public ListOrder() {
this.order = new ArrayList<Product>();
}
public Iterator<Product> iterator() {
return order.iterator();
}
public void addItem(Product product, int quantity) {
for(int i = 0; i < quantity; i++) {
this.order.add(product);
}
}
public void removeItem(Product product) {
this.order.remove(product);
}
public int numberOfItems() {
return this.order.size();
}
public int totalCost() {
int resultcost = 0;
for(Product p : order)
{
resultcost += p.getCost();
}
return resultcost;
}
public String toString() {
return this.order.toString();
}
}