我正在尝试生成随机食品和洗涤剂对象并将它们添加到产品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;}`
答案 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
。在设置任何属性(null
或0
之前)之前的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
关键字的一些用法
this
可用于引用当前的类实例变量。
this
可用于调用当前类方法(隐式)
this()
可用于调用当前的类构造函数。
this
可以在方法调用中作为参数传递。
this
可以在构造函数调用中作为参数传递。
this
可用于从中返回当前的类实例
方法
在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;
您将成员变量值赋给参数值。超出构造函数的范围,它是消失的。来自对象的值永远不会保存到成员变量。