【问题标题】:Adding same object to an array将相同的对象添加到数组
【发布时间】:2019-01-27 06:30:43
【问题描述】:

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

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

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());
    //}
}
}

【问题讨论】:

  • 代码格式

标签: arrays oop object


【解决方案1】:
public void reviewProduct() {
    //for(int i=0;i<myProduct.length;i++) {
    System.out.println(myProduct[1].getName());
    System.out.println(myProduct[1].getCategory());
    //}
}

您在循环中使用 myProduct[1],它只获取索引 1。您需要使用 myProduct[i]

【讨论】:

    【解决方案2】:

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

    您应该改用List,并在其中添加add 元素。如有必要,您可以稍后将其转换为数组。

    【讨论】:

      【解决方案3】:

      正如亚历克斯所说,您应该使用列表。

      这是您的服务类的修复:

      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());
          }
          }
      }
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 2016-06-17
        • 2022-06-10
        • 2022-01-13
        • 2018-09-06
        • 1970-01-01
        相关资源
        最近更新 更多