2013-12-08 73 views
0

我正在嘗試更改數組列表中項目的值。我似乎無法得到這個工作。我對如何真正地問這個問題感到不知所措。代碼是相當廣泛的(或者至少在我的書中),所以我不能真正展現全部。但是,如果我知道當前的索引,我該如何更改ItemName?在數組列表編碼問題中修改項目

currentIndex.setItemName(newItemName); 

CurrentIndex是一個int,告訴我我在哪個索引處,ItemName是一個位於我的數組列表中的字符串。我應該在試圖設置它之前獲取ItemName嗎?像這樣的東西

InventoryItem.getItemName(); 
currentIndex.setItemName(newItemName); 

這也行不通。

編輯:我被要求顯示更多的代碼。下面是我的動作監聽

modifyButton.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JTextField xField = new JTextField(15); 
      JTextField yField = new JTextField(15); 
      JTextField zField = new JTextField(15); 

      JPanel myPanel = new JPanel(); 
      myPanel.add(new JLabel("Item Name:")); 
      myPanel.add(xField); 

      myPanel.add(Box.createVerticalStrut(15)); // a spacer 
      myPanel.add(new JLabel("Number in inventory:")); 
      myPanel.add(yField); 

      myPanel.add(Box.createVerticalStrut(15)); // a spacer 
      myPanel.add(new JLabel("Unit Price:")); 
      myPanel.add(zField); 
      int result = JOptionPane.showConfirmDialog(null, myPanel, 
        "Please Enter data into all boxes", JOptionPane.OK_CANCEL_OPTION); 
      if (result == JOptionPane.OK_OPTION) { 

       String newItemName = String.valueOf(xField); 
       String text1 = yField.getText(); 
       String newInventoryAmount = String.valueOf(text1); 
       int newAmount = Integer.parseInt(newInventoryAmount); 
       String text2 = zField.getText(); 
       String newUnitPrice = String.valueOf(text2); 
       double newPrice = Double.parseDouble(newUnitPrice); 
       inventory.get(currentIndex).setItemName(newItemName); 
       inventory.get(currentIndex).setInStock(newAmount); 
       inventory.get(currentIndex).setUnitPrice(newPrice); 


      } 
     } 

} 

); 
+0

'ArrayList'的名字是什麼? – nhgrif

+0

我也試過類似'inventory.set(itemName = newItemName);'但似乎無法找到itemName。我認爲那是因爲它是在一個單獨的課堂上? – kerinr

+0

'公共靜態ArrayList 庫存=新ArrayList <>();' – kerinr

回答

1

ìnt彈出沒有一個方法setItemName(或任何方法可言,因爲它是一個原始的,而不是一個對象)面板。

嘗試yourArrayList.get(currentIndex).setItemName(newItemName);

它調用setItemName列表中所需的元素。

編輯:解決您的新的問題,與

String newItemName = xField.getText(); 

更換String newItemName = String.valueOf(xField);我相信這是你想要做什麼。

+0

這工作,但當我去看看新的價值它說物品名稱= javax.awing.JTextField(...似乎並不 – kerinr

+0

@kerinr,讓我們看看更多的代碼 – kviiri

+0

@kerinr,看看我的答案中的編輯 – kviiri

1
+0

'set'改變了對象的引用,這對改變對象沒有好處在列表中沒有更換它 – kviiri

+0

但他說這個字符串在他的數組列表中,並且他試圖改變它。字符串是不可變的,所以唯一的方法是將它設置在列表中。 –

+0

字符串不可變不意味着您不能替換對象中的字符串引用。 – kviiri

2

我不知道你的ArrayList是什麼名字,所以我只會把它的ArrayList。

嘗試

arrayList.get(currentIndex).setItemName(newItemName); 

arrayList.get(currentIndex)調用從列表的當前索引

這允許您使用.setItemName(newItemName)改變對象的名稱處的元素。

+1

這似乎令人困惑。也許只是把它叫做arrayList。 – bcorso

+0

是的,至少給它一個理論上是正確的名稱。 – kviiri

0

看看這個代碼,完成我認爲你正在嘗試做的事情。

public class Test { 

    public static void main(String args[]){ 

     ArrayList<Employee> myArrayList = new ArrayList<Employee>(); 

     Employee e1 = new Employee(); 
     e1.setName("Juan"); 

     myArrayList.add(e1); 

     myArrayList.get(0).setName("Jhon"); 

     System.out.println(myArrayList.get(0).getName()); 


    } 

} 

class Employee { 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 



}