Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: nico56 en 8 Julio 2010, 21:23 PM

Título: Ayuda con esta funcion
Publicado por: nico56 en 8 Julio 2010, 21:23 PM
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.
Título: Re: Ayuda con esta funcion
Publicado por: Debci en 8 Julio 2010, 21:55 PM
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
Título: Re: Ayuda con esta funcion
Publicado por: 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.
Título: Re: Ayuda con esta funcion
Publicado por: Debci en 8 Julio 2010, 22:20 PM
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]
Título: Re: Ayuda con esta funcion
Publicado por: nico56 en 8 Julio 2010, 23:39 PM
Si me habia equivocado, la idea era volver a pedirlo si lo insertaba mal.
Título: Re: Ayuda con esta funcion
Publicado por: Leyer en 9 Julio 2010, 00:02 AM
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;
}
Título: Re: Ayuda con esta funcion
Publicado por: 43H4FH44H45H4CH49H56H45H en 9 Julio 2010, 04:38 AM
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;
        }
    }
}
Título: Re: Ayuda con esta funcion
Publicado por: joseprox en 13 Julio 2010, 01:35 AM
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