Comprobar si una variable es numérica

Iniciado por JonaLamper, 3 Enero 2015, 16:43 PM

0 Miembros y 1 Visitante están viendo este tema.

JonaLamper

Hola,

Tengo un bucle do while del estilo (en pseudocódigo):


do {
  System.out.print("Introduzca la columna: ");
  Recojo la columna introducida en una variable llamada recoger



  Por aquí abajo habrá algo en plan System.out.print("Debe introducir solo números enteros.")

} while (recoger == cualquier cosa que no sea un número);

Así que como veis, necesito entrar en un do while y hasta que el usuario no introduzca un número, no puede salir. Mi duda viene en que no sé cómo decir en el while 'Si recoger es cualquier cosa que no sea un número', o sea, ¿cómo podría hacer esa comparación?
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

Flamer

aver si entendi no saldras del bucle hasta que el usuario inserte un dato numerico y no sabes lo que usuario inserta bueno..

Declara la variable como numerica y cuando inserte algo que nosea numeros marcara error

saludos Flamer

JonaLamper

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

WHK

#3
Así?

Código (java) [Seleccionar]
import java.util.Scanner;

public class JonaLamper{
   
   public JonaLamper() {
       /* Constructor */

       Integer respuesta = this.preguntarColumna();
       // ...

   }

   public Integer preguntarColumna(){
       Scanner sc = new Scanner(System.in);
       String recoger;
       System.out.print("Introduzca la columna: ");
       recoger = sc.nextLine().trim();

       if(recoger.matches("-?\\d+(\\.\\d+)?")){
           try {
               return Integer.parseInt(recoger);

           }catch(Exception e){
               System.out.print("Debe introducir solo números enteros.");
               return this.preguntarColumna();
           }
       }else{
           System.out.print("Debe introducir solo números enteros.");
           return this.preguntarColumna();
       }
   }
}


Ahora, si yo fuera tu dentro de la misma función de preguntar columna verificaría antes de retornar el integer que si realmente el id de columna existe, así no tienes que estar controlando la integridad de datos cada ves que lo uses y si no existe debería decir que debe introducir un número de columna válido.

JonaLamper

#4
He intentado arreglarlo pero nada. Creo que será más fácil si ves lo que tengo:

Código (java) [Seleccionar]
} else if(comando.equalsIgnoreCase("PONER")) {

do {
try{
System.out.print("Introduzca la columna: ");
c = this.in.nextInt();
this.in.nextLine();
continuar = false;

} catch(InputMismatchException intInputMismatchException){
System.err.printf("\n Error: %s\n", intInputMismatchException);
System.out.println("Se deben introducir solo numeros enteros");
System.out.println();
this.in.next();

}
//Esto hay que cambiarlo!!
} while (continuar == true);


Y al ejecutarlo, dentro del programa, el resultado es este:





Lo he arreglado, pero me salta por pantalla el mensaje de java.util.InputMismatchException. Igualmente, hasta la siguiente práctica no era necesario controlar las excepciones, así que si no quieres comerte mucho la cabeza tampoco pasa nada, lo puedo dejar así.

Saludos.

PD: el controlar que la columna introducida esté dentro del rango posible se hace más abajo, cuando se crea un objeto y se procede a insertar la ficha en la respectiva columna  ;D
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.

WHK

Prueba con    
System.err.printf("\n Error: %s\n", intInputMismatchException.getMessage());

JonaLamper

Ahora solo aparece la palabra null.

Lo voy a dejar así, muchas gracias.
Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.