Validate data entry

2

You could help me with the implementation of a java code for data validation, for example, by typing a String "1234" , or "12.34" , or "12.34\n" or "\n" , or well that does not exceed the number of digits required (I do not know if the forms of income are understood).

That is to say that the entered data goes through different restrictions and force the user to enter what the program asks for, and in the case of being the "\n" convert it to the character "%code%" .

I think this is what the programmers call "error trapping" or junk code ... I hope you have understood what I mean, since looking for this topic on the net is not entirely clear, and it would help me codes were a little better.

/* Código de Java: Validación de dato */
public class ValidarAcceso {
    public static void main( String[] args ){
        final int MIN = -1000;
        final int MAX = +1000;

        int inicio;
        int termina;
        double respuesta;

        System.out.println("Este programa calcula la suma de los cuadrados de enteros.\n"+
                           "en un rango entre -1000 y +1000.\n"+
                           "Ingresa los límites (0 en los dos límites para terminar)\n"+
                           "Límite bajo: " );
        inicio = obten_int();
        System.out.println("Limite alto: ");
        termina = obten_int();

        while( inicio != 0 || termina != 0)
        {
            if( mal_limites( inicio, termina, MIN, MAX ) )
                System.out.println( "Otra vez por favor\n" );
            else
            {
                respuesta = suma_cuadrados( inicio, termina );
                System.out.println("La suma de los cuadrados de los enteros ");
                System.out.printf("entre %d y %d es %g\n", inicio, termina, respuesta );
            }
            System.out.println("Entra los límites (0 en los dos "+
                               " para terminar)\n");
            System.out.println( "limite bajo: " );
            inicio = obten_int();
            System.out.println( "limite alto: " );
            termina = obten_int();
        }
        System.out.println( "Listo.\n" );
    }

    public static int obten_int()
    {
        Scanner scan = new Scanner(System.in);
        int ingreso;

        while( ( ingreso = scan.nextInt() ) != 1 )
        {
            String cadena = new String( scan.nextLine() );
            while( ( scan.nextLine() ) !="\n" )
                cadena.charAt(ingreso);
            System.out.println(" no es entero.\nFavor entrar un ");
            System.out.println( "entero como 25, -178, o 3: ");
        }
        return ingreso;
    }

    public static double suma_cuadrados( int a, int b )
    {
        double total = 0;
        int i;

        for( i = a; i <= b; i++ )
            total +=i * i;

        return total;
    }

    public static boolean mal_limites( int inicio, int termina, int bajo, int alto )
    {
        boolean no_bueno = false;

        if( inicio > termina )
        {
            System.out.printf("%d no es menor que %d.\n", inicio, termina );
            no_bueno = true;
        }

        if( inicio < bajo || termina < bajo )
        {
            System.out.printf("Valores deber ser >= %d.\n", bajo );
            no_bueno = true;
        }

        if( inicio > alto || termina > alto )
        {
            System.out.printf("Valores deber ser <= %d.\n", alto );
            no_bueno = true;
        }

        return no_bueno;
    }
}
    
asked by pablo sabadini 25.04.2017 в 16:30
source

1 answer

2

To make your code work you must reinforce the obten_int() function as follows:

public static int obten_int()
{
    Scanner scan = new Scanner(System.in);

    do {
        if (scan.hasNext()) {
            if (scan.hasNextInt()) {
                return scan.nextInt();
            } else {
                scan.next();
                System.out.println(" no es entero.\nFavor entrar un ");
                System.out.println( "entero como 25, -178, o 3: ");
            }
        } else {
            System.out.println("Recibido EOF (forzamos 0)");
            return 0;
        }
    } while (true);
}

With this change your application works correctly.

If we modify the data entry loop to make it clearer, the final result in ValidarAcceso.java would be:

import java.util.Scanner;
/* Código de Java: Validación de dato */
public class ValidarAcceso {
    public static void main( String[] args ){
        final int MIN = -1000;
        final int MAX = +1000;

        int inicio;
        int termina;
        double respuesta;

        System.out.println("\nEste programa calcula la suma de los cuadrados de enteros " +
                           "en un rango entre " + MIN + " y " + MAX + ".\n" +
                           "Intruduzca los valores inferior y superior (0 en ambos para terminar)\n\n");

        while (true) {
            while (true) {
                System.out.print( "\nIntroduzca el valor inferior: " );
                inicio = obten_int();
                System.out.print( "\nIntroduzca el valor superior: " );
                termina = obten_int();
                if( mal_limites( inicio, termina, MIN, MAX ) == false ) {
                    break;
                }
            }
            if ( inicio == 0 && termina == 0) break;
            respuesta = suma_cuadrados( inicio, termina );
            System.out.println("\nLa suma de los cuadrados de los enteros ");
            System.out.printf("entre %d y %d es %g\n", inicio, termina, respuesta );
        }
        System.out.println( "\nListo.\n" );
    }

    public static int obten_int()
    {
        Scanner scan = new Scanner(System.in);
        int ingreso;

        do {
            if (scan.hasNext()) {
                if (scan.hasNextInt()) {
                    return scan.nextInt();
                } else {
                    scan.next();
                    System.out.print("No ha introducido un número correcto.\n\nFavor entrar un entero como 25, -178, o 3: ");
                }
            } else {
                System.out.println("Recibido EOF (forzamos 0)");
        return 0;
            }
        } while (true);
    }

    public static double suma_cuadrados( int a, int b )
    {
        double total = 0;
        int i;

        for( i = a; i <= b; i++ )
            total +=i * i;

        return total;
    }

    public static boolean mal_limites( int inicio, int termina, int bajo, int alto )
    {
        boolean no_bueno = false;

        if( inicio > termina )
        {
            System.out.printf("%d no es menor que %d.\n", inicio, termina );
            no_bueno = true;
        }

        if( inicio < bajo || termina < bajo )
        {
            System.out.printf("Valores deber ser >= %d.\n", bajo );
            no_bueno = true;
        }

        if( inicio > alto || termina > alto )
        {
            System.out.printf("Valores deber ser <= %d.\n", alto );
            no_bueno = true;
        }

        return no_bueno;
    }
}
    
answered by 26.04.2017 в 11:11