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.

Debería seguir aceptando el precio de un artículo y mostrar el total actual mientras la entrada del usuario no sea igual a cero.

/* Necesito ayuda. Estoy atrapado/a con este código. Debería continuar aceptando el precio de un artículo y mostrar el total actual mientras que la entrada del usuario no sea igual a cero. Sin embargo, la salida para el total actual no muestra la cantidad actual. */

public static void main(String[] args){

Scanner scanner = new Scanner(System.in);
String customerName;
char promtSenior;
int num = 1;
double itemPrice;
double currentTotal = 0;
ArrayList<double> amounts = new ArrayList<double>();
System.out.print("Por favor ingrese el nombre del cliente: ");
customerName = scanner.nextLine();

while (true) {
    System.out.print("Por favor ingrese el precio del artículo " + num++ + " o 0 para salir: ");
    itemPrice = scanner.nextDouble();
    amounts.add(itemPrice);
    scanner.nextLine();
    for (double i : amounts) {
            currentTotal = currentTotal + i ;  
        }
        System.out.println(currentTotal);


    if (itemPrice == 0) {
        System.out.println("¿Es usted un ciudadano de la tercera edad? [S/N]: " + customerName);
        promtSenior = scanner.next().charAt(0);
        if (promtSenior == 'N') {
            System.out.println("Sin descuento");
        }
    }
}         

}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Explicación del código

    Este es un código Java que acepta el precio de un artículo y muestra el total actual mientras la entrada del usuario no sea igual a cero. El código utiliza un Scanner para obtener la entrada del usuario para el precio del artículo y lo almacena en un ArrayList llamado amounts. El código también establece un valor inicial de 0 para la variable currentTotal.

    Luego, el código entra en un bucle que continúa hasta que el usuario ingrese 0. Dentro del bucle, el precio del artículo se agrega al ArrayList amounts y se utiliza un bucle for-each para iterar a través del ArrayList amounts y sumar todos los valores para obtener el total actual. Finalmente, el total actual se muestra utilizando la instrucción println.

    Si el usuario ingresa 0, el código solicita al usuario que indique si es un ciudadano mayor o no. Si el usuario indica que no es un ciudadano mayor escribiendo N, el código mostrará una declaración que dice “No hay descuento”.

    Problema con el código

    El problema con el código actual es que el total actual no se actualiza correctamente a medida que el usuario ingresa los precios de los artículos. Esto se debe a que el bucle for-each que calcula el total actual está dentro del bucle while que agrega elementos al ArrayList amounts. Esto significa que el bucle for-each se ejecutará cada vez que se agregue un nuevo elemento al ArrayList amounts y sumará todos los elementos, incluido el total actual calculado previamente. Esto da como resultado la visualización de un total actual incorrecto.

    Solución

    Para solucionar el problema con el código actual, el bucle for-each que calcula el total actual debe moverse fuera del bucle while que agrega elementos al ArrayList amounts. Esto garantizará que el total actual se calcule correctamente solo después de que se hayan agregado todos los elementos al ArrayList amounts.

    Aquí está el código corregido:

    public static void main(String[] args){
    
        Scanner scanner = new Scanner(System.in);
    
        String customerName;
        char promtSenior;
        int num = 1;
        double itemPrice;
        double currentTotal = 0;
        ArrayList<double> amounts = new ArrayList<double>();
    
        System.out.print("Por favor ingrese el nombre del cliente: ");
        customerName = scanner.nextLine();
    
        while (true) {
            System.out.print("Por favor ingrese el precio del artículo " + num++ + " o 0 para salir: ");
            itemPrice = scanner.nextDouble();
    
            if (itemPrice == 0) {
                break;
            }
    
            amounts.add(itemPrice);
        }
    
        for (double i : amounts) {
            currentTotal = currentTotal + i ;  
        }
    
        System.out.println(currentTotal);
    
        System.out.println("¿Es usted un ciudadano mayor? [Y/N]: " + customerName);
        promtSenior = scanner.next().charAt(0);
    
        if (promtSenior == 'N') {
            System.out.println("Sin descuento");
        }
    
    } 
    

    En este código corregido, el bucle while que agrega elementos al ArrayList amounts continúa hasta que el usuario ingresa 0. Una vez que el bucle while ha terminado, se utiliza el bucle for-each para calcular el total actual iterando sobre todos los elementos en el ArrayList amounts.

    Finalmente, el código solicita al usuario que indique si es un ciudadano mayor y si el usuario indica que no es un ciudadano mayor escribiendo N, el código mostrará una declaración que dice “Sin descuento”.

    Este código corregido ahora debería calcular y mostrar correctamente el total actual.

Comments are closed.