【问题标题】:Modifying an item in an arraylist coding issue修改数组列表编码问题中的项目
【发布时间】:2013-12-08 18:00:08
【问题描述】:

我正在尝试更改我的数组列表中项目的值。我似乎无法让这个工作。我不知道如何真正问这个问题。代码非常广泛(或者至少在我的书中),所以我无法真正展示所有这些。但是,如果我知道当前索引,如何让它更改 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);


            }
        }

}

);

【问题讨论】:

  • 你的ArrayList叫什么名字?
  • 我也尝试过inventory.set(itemName = newItemName); 之类的方法,但似乎找不到 itemName。我认为那是因为它在一个单独的班级中?
  • public static ArrayList<InventoryItem> inventory = new ArrayList<>();

标签: java netbeans arraylist


【解决方案1】:

我不确定你的 ArrayList 是什么名字,所以我就叫它 arrayList。

试试

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

arrayList.get(currentIndex) 在当前索引处调用列表中的元素

这允许您使用.setItemName(newItemName) 更改对象的名称。

【讨论】:

  • 这似乎令人困惑。也许就叫它arrayList吧。
  • 是的,至少给它一个理论上可以正确的名字。
【解决方案2】:

ìnt 没有方法 setItemName(或任何方法,因为它是原始的,而不是对象)。

试试yourArrayList.get(currentIndex).setItemName(newItemName);

它在列表的所需元素上调用setItemName

编辑:要解决您的新问题,请将String newItemName = String.valueOf(xField); 替换为

String newItemName = xField.getText();

我相信这就是你想要做的。

【讨论】:

  • 这可行,但是当我查看新值时,它会显示 Item Name = javax.awing.JTextField( ... 并且似乎并没有真正改变它。
  • 现在就像一个魅力!谢谢
【解决方案3】:

【讨论】:

  • set 更改对象引用,如果不替换列表中的对象进行变异是不好的。
  • 但他说字符串在他的数组列表中,他正在尝试更改它。该字符串是不可变的,因此唯一的方法是将其设置在列表中。
  • 字符串不变性并不意味着您不能替换对象中的字符串引用。
  • set 的作用是什么......他说他的列表直接包含字符串 - 所以他没有要修改的对象。
  • 没关系,我刚看到他的评论,他确实有一个对象可以设置名称:)
【解决方案4】:

查看这段代码,它完成了我认为你正在尝试做的事情。

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;
    }



}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多