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");
}
}
}
}
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 de0
para la variablecurrentTotal
.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 ArrayListamounts
y se utiliza un bucle for-each para iterar a través del ArrayListamounts
y sumar todos los valores para obtener el total actual. Finalmente, el total actual se muestra utilizando la instrucciónprintln
.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 escribiendoN
, 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 ArrayListamounts
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 ArrayListamounts
.Aquí está el código corregido:
En este código corregido, el bucle while que agrega elementos al ArrayList
amounts
continúa hasta que el usuario ingresa0
. 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 ArrayListamounts
.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.