对象arraylist错误

时间:2017-05-20 16:09:19

标签: java arraylist

我正在尝试生成随机食品和洗涤剂对象并将它们添加到产品arraylist中(食品和洗涤剂类扩展产品),但是当我尝试从arraylist中读取时,我插入的所有随机属性都是0或null。如果需要,我可以为您提供其他类的代码,但我不认为构造函数存在问题。先谢谢。

    ArrayList<Products> products = new ArrayList<>();
    for (int i = 0; i <= 300; i++) {
        char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int a = 0; a < 10; a++) {
            char c = chars[random.nextInt(chars.length)];
            sb.append(c);
        }
        String a = sb.toString();

        Random generator = new Random();
        int randomIndex = generator.nextInt(manufacturers.length);
        String b = manufacturers[randomIndex];

        int randomIndex2 = generator.nextInt(suppliers.length);
        String c = suppliers[randomIndex2];

        Random r = new Random();
        int d = ThreadLocalRandom.current().nextInt(7, 28 + 1);
        int e = ThreadLocalRandom.current().nextInt(12, 31 + 1);
        int f = ThreadLocalRandom.current().nextInt(-1, 30 + 1);
        int g = ThreadLocalRandom.current().nextInt(-8, 25 + 1);

        products.add(new Food(a, b, c, d, e, f, g));

这是食物构造函数:

Food(String name,String manufacturer,String supplier,int purchase_price,int selling_price,int sale_date,int expiration_date){ super(name,manufacturer,supplier,purchase_price,selling_price,sale_date); expiration_date=this.expiration_date; }

和产品超类代码:

    Products(String name,String manufacturer,String supplier,int purchase_price,int selling_price,int sale_date){ 
    name=this.name;
    manufacturer=this.manufacturer;
    supplier=this.supplier;
    purchase_price=this.purchase_price;
    selling_price=this.selling_price;
    sale_date=this.sale_date;}`

2 个答案:

答案 0 :(得分:0)

问题似乎出现在Products构造函数中:

Products(String name,String manufacturer,String supplier,int purchase_price,int selling_price,int sale_date) { 
    name=this.name;
    manufacturer=this.manufacturer;
    supplier=this.supplier;
    purchase_price=this.purchase_price;
    selling_price=this.selling_price;
    sale_date=this.sale_date;
}

上面构造函数语句的左侧应该将this指针指向传递给构造函数参数列表的参数,而不是相反。您的构造函数将本地参数列表参数设置为this。在设置任何属性(null0之前)之前的belongsProperty。换句话说,构造函数是一个无操作,因为构造函数参数是在我们离开构造函数范围后消失的临时值。

你打算做什么:

Products(String name,String manufacturer,String supplier,int purchase_price,int selling_price,int sale_date) { 
    this.name = name;
    this.manufacturer = manufacturer;
    this.supplier = supplier;
    this.purchase_price = purchase_price;
    this.selling_price = selling_price;
    this.sale_date = sale_date;
}

答案 1 :(得分:0)

以下是我从JavaTPoint

中获取的this关键字的一些用法
  1. this可用于引用当前的类实例变量。

  2. this可用于调用当前类方法(隐式)

  3. this()可用于调用当前的类构造函数。

  4. this可以在方法调用中作为参数传递。

  5. this可以在构造函数调用中作为参数传递。

  6. this可用于从中返回当前的类实例 方法

  7. Food构造函数

    expiration_date=this.expiration_date;
    

    应该是

    this.expiration_date= expiration_date;
    

    Products构造函数中,所有赋值都应该是

    this.name = name;
    this.manufacturer = manufacturer;
    this.supplier = supplier;
    this.purchase_price = purchase_price;
    this.selling_price = selling_price;
    this.sale_date = sale_date;
    

    您知道this.name引用Products类的成员变量(继承)。这里发生的是name = this.name;您将成员变量值赋给参数值。超出构造函数的范围,它是消失的。来自对象的值永远不会保存到成员变量。