我想创建一个购物清单应用程序。我不确定如何逐个添加项目,因此列表扩展而不是替换现有项目。这是我目前的代码。我尝试使用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("");
}
答案 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<>();