¿Casi un año registrado en el foro y todavía no formateas apropiadamente los códigos que publicas? ...espero ver una mejora en eso (o el siguiente post podría acabar en la basura). Lee las normas del subforo de programación, por favor.
No estoy muy convencido pero ¿cabría la posibilidad de que el problema tal vez pueda deberse al propio búcle de tipo "do-while"?, más que nada lo comento por que la expresión se evalua al final del bloque y no al principio cómo hace un "while" corriente, y en mi opinión algo grave parece suceder con ese tipo de mecanismo del do-while para que se genere una extraña iteración infinita que parece imperceptible a simple vista, ya que todo parece estar bien en tu código y en el de @YuseTist ...al menos para mi. Quien tenga mejor conocimiento de los internals de Java que me corrija, ya que no estoy seguro de si puede ser eso el fallo.
Aparte de la modificación del tipo de búcle while, he mejorado la lógica del algoritmo y el control de errorres, se obtiene la linea de entrada por parte del usuario y seguidamente parseo el string obtenido utilizando el método apropiado para ello,
Integer.parseInt.
De este modo todo parece funcionar cómo es debido:
import java.util.InputMismatchException;
import java.util.Scanner;
class HelloWorld{
public static void main
(String []args
){ HelloWorld.inputInt("Input an Integer value: ");
}
public static int inputInt
(String message
) {
Scanner scan
= new Scanner
(System.
in); int n = 0;
while (n == 0){
try {
n
= Integer.
parseInt(scan.
nextLine());
System.
out.
println("Its not a valid Integer value.");
} finally {
// ...
}
}
scan.close();
return n;
}
}
El código lo desarrollé y lo testeé de manera online:
http://www.tutorialspoint.com/compile_java_online.phpDe todas formas también te digo que eso que haces de definir 3 métodos diferentes para llevar a cabo practicamente la misma tarea (pedir un string y comprobar si es un string, un int, o un float) es un desprovecho de las características y ventajas que te ofrece el lenguaje que estás utilizando, lo que podrías hacer es un método genérico y según el
data-type que le pases a la función manejas ese mismo
type (o lo devuelves en una función), al principio tu método diempre debe obtener un string del
user-input claro está pero puedes especificar un
type-parameter en la firma del método genérico y castear/parsear el string obtenido a ese type o devolver ese type, teniendo solamente un método definido en lugar de 3.
Lee sobre
Generics en Java, debe ser algo fácil.
PD: No manejo Java en absoluto, solo para defenderme en cosas básicas cómo esta, no puedo proporcionarte mejor ayuda.
Saludos