в основном я написал эти два утверждения:
Account newAccount = new Account(name);
newAccount.addNewProduct();
это код и атрибут конструктора в Account:
private final int MAX_PRODUCTS = 50; //Assumes no more than 50 products per customer
private String name; //Name of the customer
private int sum; //Sum amount of the purchase
private Product[] productList; //List of products for a customer
private int productCounter; //Counter for number of products
public Account(String name)
{
Product[] productList = new Product[MAX_PRODUCTS]; //New empty list of products of the customer }
productCounter = 0;
sum = 0;
name = name;
}
Я не могу понять, почему, но в этом методе:
public void addNewProduct()
{
System.out.println("Name is: " + this.name);
productList[productCounter] = new Product();
productCounter++;
}
он печатает имя как null, хотя я ввел имя в консоли... Это похоже на не сохранение атрибутов объекта newAccount, который я создал. Зачем?
name = name
не будет работать. Вам нужно использовать this.name = name
Это связано с тем, что при использовании name
вы ссылаетесь на параметр в конструкторе; когда вы используете this.name
вы ссылаетесь на это поле.
Так же, как Анубский Нооб говорит:
name = name не будет работать, потому что вы оцениваете одно и то же значение для одной и той же переменной.
Если вы получите имя = "Джон", то что вы делаете:
Джон = Джон.
Для этого вам нужно использовать это, когда вы используете this.name = name, вы передаете полученное значение локальной переменной из вашего класса.
Поэтому, если у вас есть это:
private final int MAX_PRODUCTS = 50; //Assumes no more than 50 products per customer
private String name; //Name of the customer
private int sum; //Sum amount of the purchase
private Product[] productList; //List of products for a customer
private int productCounter; //Counter for number of products
public Account(String name)
{
Product[] productList = new Product[MAX_PRODUCTS];
productCounter = 0;
sum = 0;
this.name = name;
}
Ваше значение будет сохранено в частной переменной с именем name.