所以我正在开发一个将订购Items的java项目。但是在我的代码中,应该迭代一些标记化的术语并将它们分配给自定义Items类中的值似乎不起作用。
代码:
public void tokenizeTerms(String content) {
String[] tokenizedTerms = content.split(" ");
Item[] itemArray = new Item[tokenizedTerms.length/3];
Item fillItem = new Item();
fillItem.setName("fillItem");
fillItem.setPrice(0.00);
fillItem.setQuantity(1);
Arrays.fill(itemArray, fillItem);
int currToken = 0;
for(int i = 0; i < itemArray.length; i++) {
itemArray[i].setName(tokenizedTerms[currToken]);
currToken++;
try {
int foo = Integer.parseInt(tokenizedTerms[currToken]);
itemArray[i].setQuantity(foo);
currToken++;
double moo = Double.parseDouble(tokenizedTerms[currToken]);
itemArray[i].setPrice(moo);
currToken++;
} catch (Exception e) {
System.out.println("Error parsing data.");
}
}
this.items = itemArray;
}
项目类别:
public class Item {
private String name;
private int quantity;
private double price;
public void setName (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
public void setQuantity (int quantity) {
this.quantity = quantity;
}
public int getQuantity () {
return this.quantity;
}
public void setPrice (double price) {
this.price = price;
}
public double getPrice () {
return this.price;
}
}
当我运行tokenize terms方法并打印itemArray中每个项目的值时,我得到一组看起来像这样的项目。
名称:书数量:14价格:856.89
名称:书数量:14价格:856.89
名称:书数量:14价格:856.89
但是我知道这不应该发生,因为String[] tokenizedTerms
看起来像这样:
[CD, 32, 459.2, T-Shirt, 22, 650.8, Book, 14, 856.89]
答案 0 :(得分:5)
问题在于数组的初始化。您将多个引用放入数组中的同一Item
实例:
Item fillItem = new Item();
...
Arrays.fill(itemArray, fillItem);
您应该在数组的每个索引中放置不同的Item
个实例:
for(int i = 0; i < itemArray.length; i++) {
itemArray[i] = new Item ();
}