我想创建一个购物清单应用程序。我不确定如何逐个添加项目,以便列表扩展而不是替换现有项目。这是我目前的代码。我尝试使用 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("");
}
您正在您的方法中创建一个新的列表:
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("");
}
}
我不确定如何逐个添加项目,以便列表扩展而不是替换现有项目。
这是因为您要在每个操作上创建一个新列表。应将列表声明移至顶级。 因此,您的列表保持不变,并且会不断在其中添加项目。
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());
您正在以正确的方式解析用户输入的文本。您可能需要检查解析错误并要求用户重新输入。
执行操作时,您始终会创建一个新列表。在那之后,"旧"列表不再引用。 将新项添加到新列表中。所以这是你看到的唯一项目。您需要在操作操作已执行方法之外实例化列表。
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("");
}
目前在创建中列出对方法的每次调用,您需要将其移动到函数之外。
你需要让它成为实例变量,请注意,如果你每次调用函数时都创建新的类实例 - 将类中的list
定义为静态字段并使用它。
public static List<ShoppingItem> list = new ArrayList<>();