Ayuda con esta funcion

Iniciado por nico56, 8 Julio 2010, 21:23 PM

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

nico56

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:

Código (java) [Seleccionar]

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.

Debci

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:

Código (java) [Seleccionar]
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

Serghinio12

#2
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.

Debci

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]

nico56

Si me habia equivocado, la idea era volver a pedirlo si lo insertaba mal.

Leyer

Código (java) [Seleccionar]
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;
}


Código (java) [Seleccionar]
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;
}

43H4FH44H45H4CH49H56H45H

Código (java) [Seleccionar]
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;
        }
    }
}

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

joseprox

#7
Prueba CON ESTE......

Código (java) [Seleccionar]
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
Toda persona tiene derecho a cometer errores...
la verdad es q solo ella es RESPONSABLE DE LO QUE HACE.....!!!!!