Java - Otra de novato: bucle en un catch

 
Vista:
Imágen de perfil de Victor

Otra de novato: bucle en un catch

Publicado por Victor (11 intervenciones) el 29/06/2015 19:41:15
Debo decir que me da apuro poner mis dudas porque veo lo que pregunta otra gente y lo mío resulta demasiado básico, pero siempre intento pelearme un rato largo antes de postear. El caso es que al validar si el usuario ha introducido datos numéricos, el catch que devuelve el boolean false, hace que entre en bucle y pregunte y dé mensaje de error continuamente en vez de permitir entrar de nuevo el valor.

Seguramente es una tontería, pero no lo consigo corregir. Gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package primos;
 
import java.util.InputMismatchException;
import java.util.Scanner;
 
/**
 *
 * @author Victor
 */
public class Primos {
 
    private static Scanner teclado=new Scanner(System.in);
    static int cantidad;
    static boolean valida=false;
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int totprimos=0;
 
        //
 
       while(!valida){
        System.out.println("Introduzca la cantidad de números primos a generar:");
         valida=chequea();
 
 
          }
       System.out.println("OK "+cantidad);
    }
 
 
    // Método que chequea que la entrada de datos es numérica
 
    static boolean chequea(){
    try{
            cantidad=teclado.nextInt();
              return true;
          } catch(InputMismatchException e){
           System.err.println("Error en la entrada de datos.");
           return false;
          }
      }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de jomandye

Otra de novato: bucle en un catch

Publicado por jomandye (12 intervenciones) el 05/07/2015 18:26:09
Aquí tienes el código modificado funcionando el problema era que si la entrada del teclado esta en el try, cuando da error entra en bucle dentro del mismo, ahora esta re-colocado y con una variable string a que se convierte a int le digo si es un numero o un carácter distinto.
Espero te sirva de ayuda, puede contener algunos errores de optimizacion pero yo también estoy estudiando y aprovecho estas cosas para practicar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package Primos;
 
import java.util.InputMismatchException;
import java.util.Scanner;
 
/**
 *
 * @author Victor
 */
public class Primos {
 
    private static Scanner teclado = new Scanner(System.in);
    static int cantidad;
    static String a;
 
    public static void main(String[] args) {
 
        while (true) {
            System.out.println("Introduzca la cantidad de números primos a generar:");
            a = teclado.next();
            if (chequea() == true) { // si la conversion a tenido exito muestra el mensaje de ok, + la cantidad
                System.out.println("OK " + cantidad);
            }
 
        }
 
    }
 
    // Método que chequea que la entrada de datos es numérica
    static boolean chequea() {
        try {
            cantidad = Integer.parseInt(a); // aqui convierto de string a int, en caso de que no sea un numero medara el error que incluyo en catch
            return true;
        } catch (NumberFormatException e) {
            System.err.println("Error en la entrada de datos.");
            return false;
        }
 
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Victor

Otra de novato: bucle en un catch

Publicado por Victor (11 intervenciones) el 06/07/2015 11:22:50
Gracias, Jomandie.

Lo único que no salía del bucle si introducía valores correctos. La idea es que con ese valor que introduzco genere un total igual de números primos, que es lo que me falta ahora por escribir. Lo he retocado un pelín pero es interesante ver cómo lo has resuelto, que ya me estaba volviendo un poco loco.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package primos2;
 
import java.util.InputMismatchException;
import java.util.Scanner;
 
/**
 *
 * @author Victor
 */
public class Primos2 {
 
    private static Scanner teclado = new Scanner(System.in);
    static int cantidad;
    static String a;
    static boolean control=false;
 
    public static void main(String[] args) {
 
        while (!control) {
            System.out.println("Introduzca la cantidad de números primos a generar:");
            a = teclado.next();
            if (chequea() == true) { // si la conversion a tenido exito muestra el mensaje de ok, + la cantidad
                System.out.println("OK " + cantidad);
            }
 
        }
 
    }
 
    // Método que chequea que la entrada de datos es numérica
    static boolean chequea() {
        try {
            cantidad = Integer.parseInt(a); // aqui convierto de string a int, en caso de que no sea un numero medara el error que incluyo en catch
            return control=true;
        } catch (NumberFormatException e) {
            System.err.println("Error en la entrada de datos.");
            return control=false;
        }
 
    }
}



Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jomandye

Otra de novato: bucle en un catch

Publicado por jomandye (12 intervenciones) el 07/07/2015 14:44:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package primos2;
 
import java.util.Scanner;
 
/**
 *
 * @author Victor
 */
public class Primos2 {
 
    private static Scanner teclado = new Scanner(System.in);
    static int cantidad;
    static String a;
    static boolean control=false;
 
    public static void main(String[] args) {
 
 
 
        while (!control) {
            System.out.println("Introduzca la cantidad de números primos a generar:");
            a = teclado.next();
            if (chequea() == true) { // si la conversion a tenido exito muestra el mensaje de ok, + la cantidad
                System.out.println("OK ");
//Aqui esta el codigo que genera el numero dado en primos.
                int n = cantidad;
                int c = 1;
                int p = 2;
                int d = 2;
                while (c <= n) {
                    if (p % d == 0) {
                        if (p == d) {
                            System.out.print(p + ", ");
                            c++;
                        }
                        d = 2;
                        p++;
                    } else {
                        d++;
                    }
                }
            }
 
        }
 
    }
 
    // Método que chequea que la entrada de datos es numérica
    public static boolean chequea() {
        try {
            cantidad = Integer.parseInt(a); // aqui convierto de string a int, en caso de que no sea un numero medara el error que incluyo en catch
            return control=true;
        } catch (NumberFormatException e) {
            System.err.println("Error en la entrada de datos.");
            return control=false;
        }
 
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Victor

Otra de novato: bucle en un catch

Publicado por Victor (11 intervenciones) el 07/07/2015 16:03:01
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar