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?
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
¿Podrías poner un ejemplo?
Así?
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.
He intentado arreglarlo pero nada. Creo que será más fácil si ves lo que tengo:
} 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:
(http://nsae02.casimages.net/img/2015/01/05/mini_150105111222323628.png) (http://www.casimages.es/i/150105111222323628.png.html)
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
Prueba con
System.err.printf("\n Error: %s\n", intInputMismatchException.getMessage());
Ahora solo aparece la palabra null.
Lo voy a dejar así, muchas gracias.