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

Clase Scanner problema excepciones

Estas en el tema de Clase Scanner problema excepciones en el foro de Java en Foros del Web. Hola a todos, Estoy haciendo un programita de consola que pide unos datos por teclado usando la clase java.util.Scanner. El programa necesita un entero, para ...
  #1 (permalink)  
Antiguo 12/02/2015, 12:53
 
Fecha de Ingreso: noviembre-2008
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 16 años
Puntos: 2
Clase Scanner problema excepciones

Hola a todos,

Estoy haciendo un programita de consola que pide unos datos por teclado usando la clase java.util.Scanner. El programa necesita un entero, para calcular el cuadrado. Estoy capturando lo que se ha introducido por teclado mediante el metodo nextInt(), y quiero controlar la excepción cuando el usuario introduce algo que no es un entero, usando un bucle que me fuerce a realizar otra lectura.
Este es mi codigo:

Código:
Scanner sc = new Scanner(System.in);
       
       int numero = 0;
       boolean error = true;
       while(error){
        try{
           
               System.out.println("Introduce un numero: ");
               numero = sc.nextInt();
               error = false;
           
        }catch(InputMismatchException ex){
           System.out.println("Formato de numero equivocado");
        }
        
       }
        System.out.println("El cuadrado del numero "+numero+" es: "+Math.pow(numero, 2));
El programa funciona bien cuando introduzco un entero por teclado, pero cuando introduzco un string, entro en un bucle infinito, el programa no vuelve a esperar que introduzca algo por teclado, sino que se lanza infinitamente la excepcion InputMismatchException.

¿Cual sería la solución para conseguir el comportamiento que estoy buscando?

Gracias de antemano y un saludo
  #2 (permalink)  
Antiguo 12/02/2015, 18:43
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 9 meses
Puntos: 5
Respuesta: Clase Scanner problema excepciones

Tienes el try-catch dentro del bucle. Mi propuesta.


Código PHP:
public class Main {

    public static 
void main(String[] args) {
        
Scanner sc = new Scanner(System.in);
        
int numero;
        
String exit;

        try {
            do {
                
System.out.println("Introduce un numero: ");
                
numero sc.nextInt();
                
System.out.println("¿Quieres cambiar de número (s/n)? : ");
                exit = 
sc.next();
            } while ( !
"n".equalsIgnoreCase(exit) );

        
System.out.println("El cuadrado del numero " numero " es: " Math.pow(numero2));

        } catch (
InputMismatchException ex) {
            
System.out.println("Formato de numero equivocado");
        }
    }

  #3 (permalink)  
Antiguo 13/02/2015, 01:50
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 3 meses
Puntos: 182
Respuesta: Clase Scanner problema excepciones

Buenas,

Con la clase Scanner te recomiendo que hagas siempre un readLine() y despues conviertas al tipo que desees. El uso de next, nextInt, etc es un poco 'tricky' y no conviene usarlos si no se sabe muy bien lo que se hace.
Código Java:
Ver original
  1. [...]
  2.  System.out.println("Introduce un numero: ");
  3.  numeroConsola = sc.nextLine();
  4.  numero = Integer.parseInt(numerConsola);
  5.  
  6. catch (NumberFormatException nfe) {
  7. bla bla bla

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: clase, excepciones, programa, scanner, string
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 14:18.