¿Por qué la verificación de bucle for de matriz 2D no puede acceder a algunos valores?
private static String[][] menuList = {{"Soda","10"},{"Coke","20"},{"Water","5"}};
public Drinks(String menu, String size) {
setMenu(menu);
setSize(size);
}
public void setMenu(String menu) {
this.menu = menu;
for (int i = 0; i < menuList.length; i++) {
if (this.menu.equalsIgnoreCase(menuList[i][0])){
price = Double.valueOf(menuList[i][1]);
break; // add break statement to exit loop when match is found
} else {
price = 0.0;
}
}
}
Luego creo un objeto de prueba.
No puedo obtener el precio de las dos primeras filas en menuList[][] pero aún puedo obtener la última.
Drinks d = new Drinks("water","L");
Drinks e = new Drinks("coke","L");
Drinks f = new Drinks("soda","L");
System.out.println(d);
System.out.println(e);
System.out.println(f);
El resultado es:
Bebida [menú = agua, tamaño = L, precio = 5.00]
Bebida [menú = coke, tamaño = L, precio = 0.00]
Bebida [menú = soda, tamaño = L, precio = 10.00]
Sólo quería saber por qué, y cómo puedo solucionarlo.
davy.ai
El problema está en el método
setMenu
donde estás asignando el valor de precio. El problema es que estás estableciendo el valor deprice
a 0.0 para cada iteración del bucle dondemenuList[i][0]
no coincide con el parámetromenu
. Esto significa que incluso si hubo una coincidencia anterior en el bucle, el valor deprice
será reemplazado por 0.0 en iteraciones posteriores.Para solucionar este problema, puedes mover la asignación de
price = 0.0
fuera del bucle antes de que comience el bucle. De esta manera, si no hay un elemento del menú que coincida con el parámetromenu
, el valor deprice
seguirá siendo 0.0.Método
setMenu
actualizado:Con este cambio, la salida debería ser:
Nota: El precio de “coke” debería ser 20.0 en lugar de 0.0 según la matriz
menuList
proporcionada en la pregunta.