基本上,我有一个BudgetItem对象的ArrayList(BudgetItem是我制作的一个类)。每个BudgetItem都有三个实例变量,价格,名称和数量,每个变量都有setter和getter。我将每个BudgetItem一次添加到ArrayList中,每个都在price变量中包含不同的信息。当我打印出ArrayList的任何price元素时,使用get方法,控制台将始终打印输入的最后价格。下面,我将粘贴一些示例代码以帮助:
public class Register {
private ArrayList<BudgetItem> register = new ArrayList<BudgetItem>();
public Register(double[] price) {
//Creates a register ArrayList with specified number of
//elements and populates it with BudgetItems that contain
//the data in the price array entered in the declaration.
BudgetItem bi = new BudgetItem();
for(int i = 0; i<price.length; i++) {
bi.setPrice(price[i]);
register.add(bi);
if(i=0) { //This if statement is for debugging.
System.out.println(register.get(i).getPrice());
}
}
//This is also for debugging.
double i = register.get(0).getPrice();
System.out.println(i);
}
}
通过我的调试工作,我发现问题出在ArrayList中的get方法。无论我做什么,它都会返回输入的最后一个价格实例。 我的问题是为什么get方法不会返回指定的元素?
答案 0 :(得分:2)
您只需添加一个BudgetItem
并设置并重置其价格。您需要添加新的BudgetItem
并相应地设置其价格。
答案 1 :(得分:2)
问题是你总是修改同一个BudgetItem
对象。
尝试:
for(int i = 0; i<price.length; i++) {
BudgetItem bi = new BudgetItem(); <-- move it inside the for loop
bi.setPrice(price[i]);
register.add(bi);
}
答案 2 :(得分:2)
在for循环中添加BudgetItem bi = new BudgetItem();