Autor Tema: java verificar entrada longitud y si son números InputMismatchException  (Leído 36400 veces)

xtc3

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Hola amigos estoy haciendo un ejercicio con excepciones pero aun no se muy bien como controlarlas en este caso quiero que introduzca el usuario un codigo postal de 5 digitos y que cuando sea menor o mayor que 5 le muestre un mensaje de error, les copio el codigo aver si pueden decirme porque no me funciona de esta manera, simplemente le introduzco un codigo de 2 digitos y me pone porgrama terminado, les muestro codigo

Código: [Seleccionar]
System.out.println("Introduzca elcodigo postal del cliente: ");
   
   int codigoPostal=5;
   
   do{
    try{
    int respuesta= teclado.nextInt();
    }catch(InputMismatchException ex){
    System.out.println("Debe introducir un numero de 5 digitos.");
    }finally{
    teclado.nextLine();
    }
}while(codigoPostal<5 && codigoPostal>5);
   
   cliente.setCodigoPostal(codigoPostal);
   listaDeClientes.add(cliente);
}

}

¿que creen que debo de cambiar para qu muestre correctamente el mensaje de errror??

Muchas gracias.
« Última modificación: 14 de Septiembre 2014, 13:39 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:excepcion en java
« Respuesta #1 en: 03 de Junio 2014, 19:11 »
Hola, el fallo está en el mismo concepto de excepción que estás considerando.

Si el usuario debe introducir un número que empiece por 5 o que tenga 5 dígitos y no lo hace, esto no genera un error java (una excepción), desde el momento en que el método nextInt() que estás utilizando admite que se le pase cualquier número. Por tanto no debes pensar en tratar con un try - catch una situación de este tipo.

Si el usuario introduce un número que no empieza por 5 está incumpliendo una condición, y el cumplimiento o incumplimiento de condiciones se deben tratar con condicionales if...

if (primerNumero == 5) { ... tratamiento normal ... } else { ... mensaje de error ... }


Una excepción java puede ser un acceso a fichero que está dañado o no existe, una inderminación matemática, o incluso que el usuario introduzca una letra cuando se usa el método nextInt(), o que introduzca un número excesivamente grande (fuera del rango de los int) dado que java espera un tipo int y se le pasa otra cosa. En ese caso sí podrías hacer uso de la gestión de errores con try - catch, pero no para el caso de que no se cumpla una condición, sino para el caso de generarse una verdadera excepción. Saludos  ;D

xtc3

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re:excepcion en java
« Respuesta #2 en: 04 de Junio 2014, 11:46 »
Hola de nuevo, lo he cambiado tal y como me indicaste pero me sigue imprimiendo el numero que le paso y solo quiero que me imprima los numeros que tengan 5 digitos ni mas ni menos, pero esque no se me ocurre como hacerlo :(

Código: [Seleccionar]
int opcion;
   System.out.println("Introduzca elcodigo postal del cliente: ");
   opcion=teclado.nextInt();
   
   if (opcion==5){
   System.out.println(opcion);
   } else if ((opcion<=5)&&(opcion>=5)){
   System.out.println("Debe introducir un numero de 5 digitos.");
   }
   cliente.setCodigoPostal(opcion);
   listaDeClientes.add(cliente);
   }

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:excepcion en java
« Respuesta #3 en: 04 de Junio 2014, 12:50 »
El código:

opcion=teclado.nextInt();
      
      if (opcion==5){

Lo que hace es comprobar si el usuario introdujo el número 5. Si quieres comprobar que sea un número de 5 dígitos tendrás que usar otro tipo de condicional, por ejemplo convertir la entrada de teclado a un string y después comprobar carácter a carácter si lo introducido es un número o no, y si hay cinco caracteres o no. Puedes usar el método isdigit del api java para comprobar si un carácter es un número.

Si estás usando scanner, puedes usar nextLine para capturar la entrada, eso te devuelve un String, luego comprobar el número de caracteres del string recorriéndolo.

Si pones el código completo lo intento mirar, lo que has puesto parece que es un fragmento y no se puede compilar.  Saludos

xtc3

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re:excepcion en java
« Respuesta #4 en: 04 de Junio 2014, 14:18 »
Llevo un rato dandole vueltas a lo que me has puesto, lo he intentado pero no se como hacerlo, aun soy muy novata, estoy utilizando scanner y he probado a poner nextline, y luego dentro de un if con el metodo.length, pero esque no se como hacer lo que dices ¿no hay alguna forma mas sencilla de comprobar si una entrada numerica tiene solo 5 digitos???

¿puedes ponerme algun ejemplo cortito??
perdona por las molestias pero esque no me sale

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:excepcion en java verificar entrada longitud y si son números
« Respuesta #5 en: 04 de Junio 2014, 18:07 »
Esto es un ejemplo en este caso usando charAt para extraer los caracteres, length para comprobar la longitud e isDigit para comprobar si es un número:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
//Código de nuestra clase principal ejemplo aprenderaprogramar.com

public class Ejemplo {
    public static void main (String [ ] args) {
        boolean entradaNumerica = true;
        String entradaTeclado ="";
        System.out.print ("Introduzca un número de 3 dígitos: ");
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine (); //Invocamos un método sobre un objeto Scanner
        System.out.println ("Entrada recibida por teclado es: \"" + entradaTeclado +"\" ... análisis de longitud");   

        if (entradaTeclado.length() != 3) {
            System.out.println ("No tiene longitud 3, entrada no válida");
        } else { System.out.println ("La longitud es correcta");}

        for (int i=0;i< entradaTeclado.length(); i++) {
            System.out.print ("Analizando si caracteres son dígitos..." + entradaTeclado.charAt(i));

           
            if (Character.isDigit(entradaTeclado.charAt(i)) == false) {
                System.out.println (" ... no es un número, entrada no válida");
                entradaNumerica = false;
                break;

            } else {System.out.println(" ...ok"); }

        }
        if (entradaNumerica == true) {System.out.println ("Todos los caracteres son números"); }
        else {System.out.println ("Hay caracteres no numéricos"); }

        System.out.println ("Proceso de análisis terminó");

    }
}

xtc3

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 25
    • Ver Perfil
Re:excepcion en java verificar entrada longitud y si son números
« Respuesta #6 en: 05 de Junio 2014, 10:43 »
Muchisimas gracias! perdona por las molestias,estoy aprendiendo desde hace poco y se me hace un mundo, gracias por el ejemplo  :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".