es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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 de price a 0.0 para cada iteración del bucle donde menuList[i][0] no coincide con el parámetro menu. Esto significa que incluso si hubo una coincidencia anterior en el bucle, el valor de price 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ámetro menu, el valor de price seguirá siendo 0.0.

    Método setMenu actualizado:

    public void setMenu(String menu) {
        this.menu = menu;
        price = 0.0; // Mueve esta línea fuera del bucle
        for (int i = 0; i < menuList.length; i++) {
            if (this.menu.equalsIgnoreCase(menuList[i][0])){
                price = Double.valueOf(menuList[i][1]);
            }
        }
    }
    

    Con este cambio, la salida debería ser:

    Drink[menu = water , size = L , price = 5.00]
    Drink[menu = coke , size = L , price = 20.00]
    Drink[menu = soda , size = L , price = 10.00]
    

    Nota: El precio de “coke” debería ser 20.0 en lugar de 0.0 según la matriz menuList proporcionada en la pregunta.

Comments are closed.