如果用户决定继续向购物车添加商品,我必须制作一个Temp array
以继续调整数组列表的大小,但我的Temp array
一直有效,直到我尝试向购物车添加3个不同的商品。
我被指示以这种方式而不是array list
来表示阵列的难度。
orderProduct [productCount] = aProduct;
orderQuantity [productCount] = aQuantity;
}
}
答案 0 :(得分:1)
当购物车中已有产品时,您忘记增加productCount
。
此外,您只需将产品和数量数组设置为临时数组,而不是复制回来。
orderProduct = tempOrderedProducts;
orderQuantity = tempOrderedQuantity;
答案 1 :(得分:0)
因为在调整数组大小后忘记了productCount++
。
以下代码将起作用:
public void setOrderProduct(Product aProduct, int aQuantity) {
if (productCount == 0) {
orderProduct[0] = aProduct;
orderQuantity[0] = aQuantity;
} else {
Product[] tempOrderedProducts = new Product[orderProduct.length + 1];
int[] tempOrderedQuantity = new int[orderQuantity.length + 1];
for (int i = 0; i < orderProduct.length; i++) {
tempOrderedProducts[i] = orderProduct[i];
tempOrderedQuantity[i] = orderQuantity[i];
}
orderProduct = new Product[tempOrderedProducts.length];
orderQuantity = new int[tempOrderedQuantity.length];
for (int i = 0; i < orderQuantity.length; i++) {
orderProduct[i] = tempOrderedProducts[i];
orderQuantity[i] = tempOrderedQuantity[i];
}
orderProduct[productCount] = aProduct;
orderQuantity[productCount] = aQuantity;
productCount++; //you forgot this
}
}
更重要的是,有一种处理数组副本的简单方法:
public void setOrderProduct(Product aProduct, int aQuantity) {
if (productCount == 0) {
orderProduct[0] = aProduct;
orderQuantity[0] = aQuantity;
} else {
Product[] tempOrderedProducts = new Product[orderProduct.length + 1];
int[] tempOrderedQuantity = new int[orderQuantity.length + 1];
//System.arraycopy is more convenient and efficient
System.arraycopy(orderProduct, 0, tempOrderedProducts, 0, orderProduct.length);
System.arraycopy(orderQuantity, 0, tempOrderedQuantity, 0, orderQuantity.length);
//you don't need to copy back, just re-assign the reference
orderProduct = tempOrderedProducts;
orderQuantity = tempOrderedQuantity;
orderProduct[productCount] = aProduct;
orderQuantity[productCount] = aQuantity;
productCount++;
}
}