Estoy tratando de hacer un código similar a este método removeMenu pero quiero hacer otro método que actualice la cantidad del producto en el menú que he pedido.
Código para controlador de restaurante:
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); } } }clase de restaurante
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(); } }Tengo problemas con el método updateMenu en la clase de controlador de restaurante, ¿alguien puede ayudarme?
En primer lugar, debe leer sobre el uso básico de una lista de arreglos.
Su implementación de eliminación tiene una suposición incorrecta:
public void removeMenu(Menu menumodel) { for (Menu temp : menulist) { if (temp.equals(menumodel)) { menulist.remove(temp); break; } } }es igual a:
public void removeMenu(Menu menumodel) { menulist.remove(temp); }La implementación de Arraylist usará hashCode() y equals() para identificar el objeto correcto dentro de la lista de arreglos y eliminarlo por usted. Por lo tanto, no tiene que iterar sobre la matriz.
Consulte también cómo eliminar un objeto de una lista, que se itera: Llamar a eliminar en bucle foreach en Java
Para actualizar un objeto dentro de la lista de arreglos, primero debe recuperar el objeto y luego actualizarlo. Esto se debe a que arrayslist almacena una referencia al objeto y no una copia.
Por lo tanto, su método de actualización debe identificar el objeto para actualizar y luego establecer la cantidad en consecuencia:
En mi ejemplo, identifica el objeto por nombre de dominio: aquí "nombre del menú", por ejemplo. Café.
public void updateMenu(int updateQuant, String name) { for (Menu temp : menulist) { if (temp.getName().equals(name)) { temp.setQuant(updateQuant); break; } } }Además, ya obtiene el objeto correcto dentro de su UpdateProduct EventListener:
selectedProductEste es el MISMO objeto que encontraría el método updateMenu. Así puedes invocar
selectedProduct.setQuant(...)aquí y también actualizará la lista de arreglos. Esto se debe a que hay una referencia al objeto en diferentes variables. Ambos hacen referencia al mismo objeto.