Hola que tal, estoy haciendo una funcion para pedir un numero entero, quiero que si el usuario lo inserta mal que lo vuelva a pedir, para ello hice esta funcion:
public static int pedir_entero(String s)
{
int aux = 0;
boolean correct=false;
Scanner stdin=new Scanner(System.in);
while(correct == false)
{
try
{
System.out.print(s);
aux=stdin.nextInt();
stdin.next();
correct=true;
}
catch(InputMismatchException e)
{
System.out.println("ERROR," + s);
}
}
return aux;
}
Cuando la pruebo poniendo una letra, se cuelga el programa mostrandos repetitivamente e infinitamente esta sentencia:
"System.out.println("ERROR," + s);"
Que puede ser? Desde ya gracias y saludos.
Mira fijate que mete el catch dentro del while, por eso cuando hay un error lanzas la captura de exepcion indefinidamente, para que no ocurra, deberia ser algo asi:
public static int pedir_entero(String s)
{
int aux = 0;
boolean correct=false;
Scanner stdin=new Scanner(System.in);
try{
while(correct == false)
{
System.out.print(s);
aux=stdin.nextInt();
stdin.next();
correct=true;
}
}
catch(InputMismatchException e)
{
System.err.println("Error!");
}
return aux;
}
Como puedes ver he metido el catch fuera, no he probado el codigo, pues lo hice rapido aqui mismo, si no va dimelo y te lo pruebo, pero en principio no ha de haber problemas.
Saludos
Hola a to@s, llevo un tiempo registrado aunque no suelo postear.
He modificado un poco tu codigo pero creo que funciona:
public static int pedir_entero(String s) {
int aux = 0;
boolean correct = false;
Scanner stdin = new Scanner(System.in);
while (correct == false) {
try {
System.out.print(s);
aux = stdin.nextInt();
correct = true;
} catch (InputMismatchException e) {
System.out.println("ERROR," + s);
stdin.next();
}
}
return aux;
}
Y debci me parece que tu codigo no te lo vuelve a pedir si es erroneo.
Cita de: Serghinio12 en 8 Julio 2010, 22:11 PM
Hola a to@s, llevo un tiempo registrado aunque no suelo postear.
He modificado un poco tu codigo pero creo que funciona:
public static int pedir_entero(String s) {
int aux = 0;
boolean correct = false;
Scanner stdin = new Scanner(System.in);
while (correct == false) {
try {
System.out.print(s);
aux = stdin.nextInt();
correct = true;
} catch (InputMismatchException e) {
System.out.println("ERROR," + s);
stdin.next();
}
}
return aux;
}
Y debci me parece que tu codigo no te lo vuelve a pedir si es erroneo.
Claro que no, el no ha pedido tal caracteristica, por cierto poned las tags de codigo en java con:
[code=java]
Saludos[/code]
Si me habia equivocado, la idea era volver a pedirlo si lo insertaba mal.
public static int pedir_entero()
{
int aux = 0;
Scanner stdin=new Scanner(System.in);
try{
System.out.println("N: ");
aux=Integer.parseInt(stdin.next());
}catch (Exception e) {
System.err.println(e.getMessage());
pedir_entero();
}
return aux;
}
public static int pedir_entero1()
{
int aux = 0;
Scanner stdin=new Scanner(System.in);
do{
try{
System.out.println("N: ");
aux=Integer.parseInt(stdin.next());
break;
}catch (Exception e) {
System.err.println(e.getMessage());
continue;
}
}while(true);
return aux;
}
package entero;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String res="";
do
{
Scanner leer=new Scanner(System.in);
res = leer.next();
}while(!esNumero(res));
Integer resul = Integer.parseInt(res)+ 24;
System.out.println("Numero: " + res + " sumado + 24 = " + resul);
}
public static boolean esNumero(String valor)
{
try
{
Integer.parseInt(valor);
return true;
}
catch(NumberFormatException error)
{
System.out.println("No es numero, error: " + error);
return false;
}
}
}
Prueba CON ESTE......
import java.io.*;
public class Pedirnumero implements Serializable{
public static void main(String a[]){
BufferedReader rs = new BufferedReader(new InputStreamReader(System.in));
String dato = "";
try{
do{
System.out.print("Digite numero: "); dato = rs.readLine();
}while(pedirnumero(dato));
System.out.println("DATO CORRECTO : "+dato);
}catch(Exception e){
System.out.println("Error en "+e.getMessage());
}
}//fin main
public static boolean pedirnumero(String dato){
try{
Integer.parseInt(dato);
return false;
}catch(Exception e){
System.out.println("Dato no permitido: "+dato);
return true;
}
}
}
Leyer: Utilizar las quotes de codigo java de GeShi para la proxima