将相同的对象添加到数组

时间:2018-08-21 05:54:21

标签: arrays oop object

为什么最后一个对象仅存储在我的数组中?请帮忙。

这是创建对象的主要方法。

public class Main {

public static void main(String[] args) {
    Service sv = new Service();

    Product pd1 = new Product();
    pd1.setName("Apple");
    pd1.setCategory("Perishable");
    sv.addProduct(pd1);

    Product pd2 = new Product();
    pd2.setName("Banana");
    pd2.setCategory("Perishable");
    sv.addProduct(pd2);

    Product pd3 = new Product();
    pd3.setName("Flour");
    pd3.setCategory("Nonperishable");
    sv.addProduct(pd3);

    Product pd4 = new Product();
    pd4.setName("Mani");
    pd4.setCategory("Nonperishable");
    sv.addProduct(pd4);

    Product pd5 = new Product();
    pd5.setName("Mango");
    pd5.setCategory("Perishable");
    sv.addProduct(pd5);

    sv.reviewProduct();

}

}

public class Service {  
Product[] myProduct = new Product[10];  

public void addProduct(Product p) {
    for(int i = 0;i<myProduct.length;i++) {
        //myProduct[i] = new Product();
        myProduct[i] = p;   
    }
}

public void reviewProduct() {
    //for(int i=0;i<myProduct.length;i++) {
    System.out.println(myProduct[1].getName());
    System.out.println(myProduct[1].getCategory());
    //}
}
}

3 个答案:

答案 0 :(得分:0)

public void reviewProduct() {
    //for(int i=0;i<myProduct.length;i++) {
    System.out.println(myProduct[1].getName());
    System.out.println(myProduct[1].getCategory());
    //}
}

您在仅获取索引1的循环中使用myProduct [1]。您需要使用myProduct [i]

答案 1 :(得分:0)

您的overflow-y函数会覆盖数组中的先前元素,因为它会用相同的元素填充数组。

您应该改用List,并将addProduct元素放入其中。如有必要,您可以稍后将其转换为数组。

答案 2 :(得分:0)

如Alex所述,您应该使用列表。

以下是您的服务等级的解决方案:

public class Service {  
    List<Product> myProducts = new ArrayList<Product>();    

    public void addProduct(Product p) {
    myProduct.add(p);   
    }

    public void reviewProduct() {
    for(int i=0;i<myProduct.length;i++) {
        System.out.println(myProduct[i].getName());
        System.out.println(myProduct[i].getCategory());
    }
    }
}

希望这会有所帮助!