2017-08-03 5 views
3

私は買い物リストアプリケーションを作成します。アイテムを1つずつ追加する方法がわからないので、既存のアイテムを置き換える代わりにリストが展開されます。これは私のコードです。私は失敗してforループを使用しようとしていました。は、どのように私は1つでArrayListの1にアイテムを追加して、お互いに代わるものではありませんか?

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("");  
} 

答えて

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("");  
    } 
} 
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()); 

あなたのコードを見ています。解析エラーをチェックして、ユーザーに再入力を求めることができます。

1

現在、メソッドの呼び出しがすべて作成されているため、関数外に移動する必要があります。

インスタンス変数を作成する必要があります。関数を呼び出すときに毎回新しいクラスインスタンスを作成する場合は、静的フィールドとしてクラスにlistを定義して使用してください。

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

OPが関数を呼び出すたびに新しいクラスインスタンスを作成するのを使用する場合は、それは我々が詳細に欠けている – user7294900

+0

、我々は唯一の機能を持って動作しません。だから私は特定のケースの答えを追加します。私は答えを – user7294900

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("");  
} 
+0

に更新します。それを変更しました。 :) –

関連する問題