Foros del Web » Programación para mayores de 30 ;) » Java »

Bucle infinito do/while desesperación TOTAL

Estas en el tema de Bucle infinito do/while desesperación TOTAL en el foro de Java en Foros del Web. Hola buenas, Vereis tengo un gran problema haciendo un bucle de do/while: Código: package menu; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; public class LoteriaTest { ...
  #1 (permalink)  
Antiguo 02/01/2013, 15:16
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Exclamación Bucle infinito do/while desesperación TOTAL

Hola buenas,

Vereis tengo un gran problema haciendo un bucle de do/while:


Código:
package menu;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

public class LoteriaTest {
	
	public static void menu (){
		System.out.println(" ");
		System.out.println("Menú Principal");
		System.out.println("1.- ");
		System.out.println("2.- ");
		System.out.println("3.- ");
		System.out.println("4.- ");
		System.out.println("5.- Salir.");
		System.out.print("Elección: ");
	}

	/**
	 * @param args
	 * @throws IOException 
	 */
	
	
	public static void main(String[] args) throws IOException {
		
		int respuesta=0;
		
		
		Scanner teclado=new Scanner(System.in);		
		
		
		
		
		//PARA EL MENU USAR DO WHILE
		
		do{
			menu();
			try{
				respuesta=teclado.nextInt();
			}catch (Exception e){
				System.out.println("Ha ocurrido un error. Por favor, introduzca un número válido.");
				System.err.println(e);
			}
			switch (respuesta){
			case 1:numcomp();
				break;
			case 2:jornada();
				break;
			case 3: imprimir();
				break;
			case 4: leer();
				break;
			case 5: System.out.println("Saliendo del menú principal...");
				break;
			default: System.out.println("No existe una opción "+respuesta+". Por favor, introduzca un número válido.");
				break;
			}	
		}while(respuesta != 5);	
		// TODO Auto-generated method stub

	}

}


Quiero que cuando inserte por consola cualquier cosa menos un integer el programa me de el error (SOLAMENTE UNA VEZ) y que vuelva a pedirme un integer, no que entre en un bucle infinito...

Llevo 3 días así y ya no puedo más :( ¿cómo tendría que modificarlo?

Muchísimas gracias de antemano!!

Lay
  #2 (permalink)  
Antiguo 02/01/2013, 16:11
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 3 meses
Puntos: 39
Respuesta: Bucle infinito do/while desesperación TOTAL

La verdad es que no se muy bien porque no te funciona, yo para leer un entero siempre lo hago de esta forma:
Código:
linea = teclado.nextLine();
respuesta = Integer.parseInt(linea);
por lo que el código del método main quedaría así:
Código:
	public static void main(String[] args) throws IOException {
		
		String linea = "";
		int respuesta = 0;

		Scanner teclado = new Scanner(System.in);

		// PARA EL MENU USAR DO WHILE

		do {
			menu();
			try {
				linea = teclado.nextLine();
				respuesta = Integer.parseInt(linea);
			} catch (NumberFormatException e) {
				respuesta = 0;
				System.out.println("Ha ocurrido un error. Por favor, introduzca un número válido.");
				System.err.println(e);
			}
			switch (respuesta) {
			case 1:
				numcomp();
				break;
			case 2:
				jornada();
				break;
			case 3:
				imprimir();
				break;
			case 4:
				leer();
				break;
			case 5:
				System.out.println("Saliendo del menú principal...");
				break;
			default:
				System.out.println("No existe una opción " + linea
						+ ". Por favor, introduzca un número válido.");
				break;
			}
		} while (respuesta != 5);
		// TODO Auto-generated method stub

	}
  #3 (permalink)  
Antiguo 02/01/2013, 18:54
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Bucle infinito do/while desesperación TOTAL

El problema es que cuando introduces una letra en vez de un número, Scanner falla al leerlo, lanzas la excepción pero no tratas el error, por lo que en la siguiente pasada intentará leerlo de nuevo, dando otra vez el mismo fallo.

Lo que tienes que hacer es añadir en el catch un teclado.nextLine() para que lo lea y se olvide de él.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 03/01/2013, 02:27
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Bucle infinito do/while desesperación TOTAL

Mil gracias!!! Ya no entra en bucle! :)

Etiquetas: bucle, infinito, integer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.