Java - Detener ejecución.

 
Vista:
sin imagen de perfil

Detener ejecución.

Publicado por Nikolai (2 intervenciones) el 19/07/2021 20:57:07
Muy buenas, estoy aprendiendo java, estaba realizando un ejercicio y me tope con un error que no puedo resolver.

public static String [] AltaProducto ( String cantidadProductos [] ){

Scanner teclado = new Scanner(System.in); // Creamos el objeto Scanner.

int repetir;

for( int i = 0 ; i < cantidadProductos.length ; i++ ) {

System.out.println( "\nIngrese el nombre del producto...\n" );

cantidadProductos[i] = teclado.nextLine() ;

System.out.println( "Producto guardado con exito.\n" );

System.out.println( "\n¿Quiere ingresar otro producto\n\n1.NO\n2.SI" );

repetir = teclado.nextInt() ;

if (repetir == 1)
i = cantidadProductos.length;


}

La primera vez el bucle for funciona como debe, si el usuario ingresa 1 = NO. salimos del bucle y regreso al menu, pero en el caso de que quiera ingresar otro producto 2 = SI. el programa imprime todos los mensajes en pantalla y se detiene el la pregunta ¿Quiere ingresar otro producto?, impidiendo que ingrese un segundo producto.

¿Cómo puedo establecer bien la condición?
¿Cómo puedo hacer que el programa espere a que el usuario ingrese el dato al arreglo para volver a preguntar.?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Detener ejecución.

Publicado por Kabuto (1044 intervenciones) el 20/07/2021 00:40:04
Hola.
El problema está en que tras leer un valor numérico con nextInt(), (o nextFloat(), o nextByte()...) la siguiente lectura de una cadena con nextLine() va a fallar SIEMPRE.

Cuando en un programa tenemos que hacer lecturas de ambos tipos, cadenas y valores numéricos, lo ideal es leerlo todo con nextLine(). Y los valores numéricos parsearlos al tipo de dato que necesitamos.

Así que esta línea:
1
repetir = teclado.nextInt() ;

Cámbiala por esta:
1
repetir = Integer.parseInt(teclado.nextLine()) ;

Y ya no deberías tener problemas.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Detener ejecución.

Publicado por Nikolai (2 intervenciones) el 20/07/2021 14:50:30
Funciono, mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar