**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我想做一个代码,类似于这个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方法上有问题,有人能帮我吗?
1条答案
按热度按时间fhity93d1#
首先,您必须了解arraylist的基本用法。
您的remove实现有一个错误的假设:
等于:
arraylist的实现将使用hashcode()和equals()来标识arraylist中的正确对象并将其删除。因此,您不必迭代数组。
另请参见如何从列表中删除对象,该列表是迭代的:在java中的foreach循环中调用remove
要更新arraylist中的对象,首先必须检索该对象,然后更新它。这是因为arrayslist存储的是对对象的引用,而不是副本。
因此,更新方法必须确定要更新的对象,然后相应地设置数量:
在我的示例中,您通过域名来标识对象:这里是“菜单的名称”,例如coffee。
此外,您已经在updateproduct eventlistener中获得了正确的对象:
这与updatemenu方法找到的对象相同。因此你可以调用
在这里,它也会更新arraylist。这是因为在不同的变量上有一个对对象的引用。两者引用同一对象。