update-arraylist方法

5uzkadbs  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(295)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我想做一个代码,类似于这个removemenu方法,但我想做另一个方法,更新我订购的菜单中的产品数量。
餐厅管理员代码:

Menu coffee = new Menu("Coffee", 30);
Menu icedTea = new Menu("Iced Tea", 50);
Menu hotChoco = new Menu("Hot Chocolate", 30);
/*
   constructor ommittet.

* /

private ArrayList<Menu> menulist;

public void removeMenu(Menu menumodel) {
    for (Menu temp : menulist) {
        if (temp.equals(menumodel)) {
            menulist.remove(temp);
            break;
        }
    }
}

public void updateMenu(int updateQuant) {
            //menulist.set(3, updateQuant);
        }
    }

}

餐厅类

RestaurantController controller1 = new RestaurantController();
    private void DeleteProductActionPerformed(java.awt.event.ActionEvent evt) {                                              
    selectedProduct = controller1.getMenulist().get(JTableOrderReceived.getSelectedRow());
    if (selectedProduct != null) {
        int ans = JOptionPane.showConfirmDialog(this, "The selected product will be removed! ", "DELETE PRODUCT", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
        if (ans == JOptionPane.YES_OPTION) {
            controller1.removeMenu(selectedProduct);
            refTable();
        }
    }
}                                             
private void UpdateProduct(java.awt.event.ActionEvent evt) {                               
selectedProduct controller1.getMenulist().get(JTableOrderReceived.getSelectedRow());
    if (selectedProduct != null) {
        int parseQuant = (int) selectedProduct.getQuantity();
        String uQuant = JOptionPane.showInputDialog(this, "Update quantity " + selectedProduct.getItemName() + "\nPrice: " + selectedProduct.getPrice() + "\nCurrent order: " + parseQuant);
        int nQuant = Integer.parseInt(uQuant);
        controller1.updateMenu(nQuant);
        refTable();
    }
}

我在餐厅控制器类的updatemenu方法上有问题,有人能帮我吗?

fhity93d

fhity93d1#

首先,您必须了解arraylist的基本用法。
您的remove实现有一个错误的假设:

public void removeMenu(Menu menumodel) {
    for (Menu temp : menulist) {
        if (temp.equals(menumodel)) {
            menulist.remove(temp);
            break;
        }
    }
}

等于:

public void removeMenu(Menu menumodel) {
     menulist.remove(temp);
}

arraylist的实现将使用hashcode()和equals()来标识arraylist中的正确对象并将其删除。因此,您不必迭代数组。
另请参见如何从列表中删除对象,该列表是迭代的:在java中的foreach循环中调用remove
要更新arraylist中的对象,首先必须检索该对象,然后更新它。这是因为arrayslist存储的是对对象的引用,而不是副本。
因此,更新方法必须确定要更新的对象,然后相应地设置数量:
在我的示例中,您通过域名来标识对象:这里是“菜单的名称”,例如coffee。

public void updateMenu(int updateQuant, String name) {
    for (Menu temp : menulist) {
        if (temp.getName().equals(name)) {
            temp.setQuant(updateQuant);
            break;
        }
    }
}

此外,您已经在updateproduct eventlistener中获得了正确的对象:

selectedProduct

这与updatemenu方法找到的对象相同。因此你可以调用

selectedProduct.setQuant(...)

在这里,它也会更新arraylist。这是因为在不同的变量上有一个对对象的引用。两者引用同一对象。

相关问题