循环在数组中迭代太多次Java



所以我正在处理一个将订购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]

问题在于数组的初始化。您在数组中放置了对同一Item实例的多个引用:

    Item fillItem = new Item();
    ...
    Arrays.fill(itemArray, fillItem);

您应该在数组的每个索引中放置不同的Item实例:

for(int i = 0; i < itemArray.length; i++) {
    itemArray[i] = new Item ();
}

最新更新