如何逐个将项添加到ArrayList中而不是互相替换?

时间:2017-08-03 11:33:40

标签: java list arraylist

我想创建一个购物清单应用程序。我不确定如何逐个添加项目,因此列表扩展而不是替换现有项目。这是我目前的代码。我尝试使用for循环失败了。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    List<ShoppingItem> list = new ArrayList<>();

    String name = ShoppingListUI.jTextField1.getText();    
    double price = Double.parseDouble(jTextField2.getText());
    int quantity = Integer.parseInt(jTextField3.getText());

    ShoppingItem item = new ShoppingItem(name, price, quantity);
    list.add(item);

    for (ShoppingItem temp : list) {
        System.out.println("Item: " + temp.getName() + ", Price: " + temp.getPrice() + ", Quantity: " + temp.getQuantity());
    }

    jTextField1.setText("");
    jTextField2.setText("");
    jTextField3.setText("");    
}

4 个答案:

答案 0 :(得分:7)

您正在方法中创建一个新列表:

List<ShoppingItem> list = new ArrayList<>();

所以每次调用jButton1ActionPerformed时,都会创建一个新的List,其中只包含一个元素。

您应该将list更改为包含此方法的类的实例变量。

public class YourClass {

    List<ShoppingItem> list = new ArrayList<>();

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        String name = ShoppingListUI.jTextField1.getText();    
        double price = Double.parseDouble(jTextField2.getText());
        int quantity = Integer.parseInt(jTextField3.getText());

        ShoppingItem item = new ShoppingItem(name, price, quantity);
        list.add(item);

        for (ShoppingItem temp : list) {
            System.out.println("Item: " + temp.getName() + ", Price: " + temp.getPrice() + ", Quantity: " + temp.getQuantity());
        }

        jTextField1.setText("");
        jTextField2.setText("");
        jTextField3.setText("");    
    }
}

答案 1 :(得分:3)

  

我不确定如何逐个添加项目,因此列表会扩展而不是替换现有项目。

那是因为您正在为每个操作创建一个新列表。您应该将列表声明移到顶层。因此,您列出保持不变,并继续在其中添加项目。

List<ShoppingItem> list = new ArrayList<>();

......// other codes 

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

String name = ShoppingListUI.jTextField1.getText();    
double price = Double.parseDouble(jTextField2.getText());
int quantity = Integer.parseInt(jTextField3.getText());

ShoppingItem item = new ShoppingItem(name, price, quantity);
list.add(item);

for (ShoppingItem temp : list) {
    System.out.println("Item: " + temp.getName() + ", Price: " + temp.getPrice() + ", Quantity: " + temp.getQuantity());
}

jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");    

}

进一步查看代码

String name = ShoppingListUI.jTextField1.getText();    
double price = Double.parseDouble(jTextField2.getText());
int quantity = Integer.parseInt(jTextField3.getText());

您正在以正确的方式解析用户输入的文本。您可能需要检查解析错误并要求用户重新输入。

答案 2 :(得分:3)

执行操作时,始终会创建新列表。之后不再引用“旧”列表了。 您将新项目添加到新列表。所以这是你看到的唯一项目。您需要在Action actionPerformed方法之外实例化List。

private List<ShoppingItem> list = new ArrayList<>();

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){                                          

    String name = ShoppingListUI.jTextField1.getText();    
    double price = Double.parseDouble(jTextField2.getText());
    int quantity = Integer.parseInt(jTextField3.getText());

    ShoppingItem item = new ShoppingItem(name, price, quantity);
    list.add(item);

    for (ShoppingItem temp : list) {
        System.out.println("Item: " + temp.getName() + ", Price: " + temp.getPrice() + ", Quantity: " + temp.getQuantity());
    }

    jTextField1.setText("");
    jTextField2.setText("");
    jTextField3.setText("");    
}

答案 3 :(得分:1)

当前列表中创建了对方法的每次调用,您需要将其移出函数。

你需要make it Instance变量,注意以防你每次调用函数时都创建新的类实例 -  将类中的list定义为静态字段并使用它。

public static List<ShoppingItem> list = new ArrayList<>();