添加第3项后,临时数组无法正常工作

时间:2014-02-08 06:26:25

标签: java arrays

如果用户决定继续向购物车添加商品,我必须制作一个Temp array以继续调整数组列表的大小,但我的Temp array一直有效,直到我尝试向购物车添加3个不同的商品。

我被指示以这种方式而不是array list来表示阵列的难度。

     orderProduct [productCount] = aProduct;
     orderQuantity [productCount] = aQuantity;
    }
}

2 个答案:

答案 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++;
    }
}