循环遍历数组太多次Java

时间:2015-07-05 05:08:44

标签: java arrays loops for-loop

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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