Autor Tema: Mejorar la forma de codificar en Java reducir número de líneas código CU00908C  (Leído 2665 veces)

Erik_Escriche

  • Principiante
  • **
  • Mensajes: 65
    • Ver Perfil
Buenas a todos.

Dejo aquí mi respuesta al ejercicio de la entrega CU00908C sobre generación de números aleatorios con Java por si hubiera algo que mejorar.

Clase donde genero los números aleatorios:

Código: [Seleccionar]
package javaAvanzado;
import java.util.Random;
public class GeneradorAleatorio {
    //Atributos.
    private int numeroInicial;
    private int numeroFinal;
    private int rndEntero;   
    //Constructor.
    public GeneradorAleatorio () {
        numeroInicial=0;
        numeroFinal=0;
        rndEntero=0;
    }
    //Setters.
    public void setNumeroInicial (int valorNumeroInicial) {
        numeroInicial = valorNumeroInicial;
    }

    public void setNumeroFinal (int valorNumeroFinal) {
        numeroFinal = valorNumeroFinal;
    }

    public int generar() {
        Random rnd = new Random(); 
        int cantidadNumerosRango;
        if (numeroFinal<0&&numeroInicial<0) {
            //Intervalo de enteros negativos.
            if (numeroFinal<=numeroInicial) {
                cantidadNumerosRango = -((-numeroFinal)+numeroInicial+1);
                rndEntero =(int) ((rnd.nextDouble()*cantidadNumerosRango)+numeroInicial);               
            } else {
                cantidadNumerosRango = -((-numeroInicial)+numeroFinal+1);
                rndEntero =(int) ((rnd.nextDouble()*cantidadNumerosRango)+numeroFinal);
            }
        } else {
            //Intervalo de enteros positivos o de positivos y negativos.
            cantidadNumerosRango =numeroFinal-numeroInicial+1;
            rndEntero = (int) ((rnd.nextDouble()*cantidadNumerosRango)+numeroInicial);           
        }
        return rndEntero;
    }     

    public int getRandom () {
        return rndEntero;
    }
}

Clase con el método main.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Scanner;
public class MainGenerarAleatorio {
    public static void main (String [] args) {
        Scanner entrada = new Scanner (System.in);
        GeneradorAleatorio generador = new GeneradorAleatorio();
        int recibido;

        System.out.println ("Introduce el número inicial del rango.");     
        recibido = entrada.nextInt();
        generador.setNumeroInicial(recibido);
        System.out.println ("Introduce el número final del rango.");
        recibido = entrada.nextInt();
        generador.setNumeroFinal(recibido);
        System.out.println ("Introduce el número de intentos.");
        int intentos = entrada.nextInt();
        int contadorAciertos = 0;
        int contadorFallos = 0;
        int[] resultados = new int[intentos];
        for (int i=0; i<intentos; i++) {           
            System.out.println ("¿En qué número estoy pensando?");
            recibido = entrada.nextInt();           
            if (recibido==generador.generar()) {
                System.out.println ("¡Has acertado! Enhorabuena.");
                contadorAciertos=contadorAciertos+1;
            } else {System.out.println ("No es ese.");
                contadorFallos=contadorFallos+1;
            }
            resultados[i] = generador.getRandom();
        }
        System.out.println ("Has acertado "+contadorAciertos+" veces y has fallado "+contadorFallos+".");
        System.out.print ("Solución: ");
        for (int i=0; i<resultados.length; i++) {System.out.print(resultados[i]+" ");}       
        String seguir="s";     
        while (seguir.equalsIgnoreCase("s")) {
            entrada.nextLine();
            System.out.println ("¿Quieres probar de nuevo? (s/n)");           
            seguir = entrada.nextLine();
            if (seguir.equalsIgnoreCase("s")) {
                System.out.println ("Introduce el número inicial del rango.");     
                recibido = entrada.nextInt();
                generador.setNumeroInicial(recibido);
                System.out.println ("Introduce el número final del rango.");
                recibido = entrada.nextInt();
                generador.setNumeroFinal(recibido);
                System.out.println ("Introduce el número de intentos.");
                intentos = entrada.nextInt();
                contadorAciertos = 0;
                contadorFallos = 0;
                resultados = new int[intentos];
                for (int i=0; i<intentos; i++) {           
                    System.out.println ("¿En qué número estoy pensando?");
                    recibido = entrada.nextInt();           
                    if (recibido==generador.generar()) {
                        System.out.println ("¡Has acertado! Enhorabuena.");
                        contadorAciertos=contadorAciertos+1;
                    } else {System.out.println ("No es ese.");
                        contadorFallos=contadorFallos+1;
                    }
                    resultados[i] = generador.getRandom();
                }
                System.out.println ("Has acertado "+contadorAciertos+" veces y has fallado "+contadorFallos+".");
                System.out.print ("Solución: ");
                for (int i=0; i<resultados.length; i++) {System.out.print(resultados[i]+" ");}
            } else {System.out.println ("¡Hasta la próxima!"); break;}
        }
    }
}

¡Un saludo!
« Última modificación: 25 de Diciembre 2016, 21:11 por Ogramar »

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Ejercicio de la entrega CU00908C Clase Random
« Respuesta #1 en: 15 de Diciembre 2016, 06:26 »
Buenos días.
Tu código daría el resultado pedido,pero la clase main se podría reducir bastante:
Código: [Seleccionar]
import java.util.Scanner;
public class MainGenerarAleatorio {
    public static void main (String [] args) {
        Scanner entrada = new Scanner (System.in);
        GeneradorAleatorio generador = new GeneradorAleatorio();
        int recibido;       
        int intentos;
        int contadorAciertos = 0;
        int contadorFallos = 0;
        int[] resultados ;       
        int seguir=0;   
        while (seguir==0) {
            System.out.println ("Introduce el número inicial del rango.");     
            recibido = entrada.nextInt();
            generador.setNumeroInicial(recibido);
            System.out.println ("Introduce el número final del rango.");
            recibido = entrada.nextInt();
            generador.setNumeroFinal(recibido);
            System.out.println ("Introduce el número de intentos.");
            intentos = entrada.nextInt();
            contadorAciertos = 0;
            contadorFallos = 0;
            resultados = new int[intentos];
            for (int i=0; i<intentos; i++) {           
                System.out.println ("¿En qué número estoy pensando?");
                recibido = entrada.nextInt();           
                if (recibido==generador.generar()) {
                    System.out.println ("¡Has acertado! Enhorabuena.");
                    contadorAciertos=contadorAciertos+1;
                } else {System.out.println ("No es ese.");
                    contadorFallos=contadorFallos+1;
                }
                resultados[i] = generador.getRandom();
            }
            System.out.println ("Has acertado "+contadorAciertos+" veces y has fallado "+contadorFallos+".");
            System.out.print ("Solución: ");
            for (int i=0; i<resultados.length; i++) {System.out.print(resultados[i]+" ");}
            System.out.println ("¿Quieres probar de nuevo? (s/n)");   
            entrada.nextLine();           
            if (entrada.nextLine().equalsIgnoreCase("n")) {seguir=1;}
        }
        System.out.println ("¡Hasta la próxima!");
    }
}

Un saludo

Erik_Escriche

  • Principiante
  • **
  • Mensajes: 65
    • Ver Perfil
Re:Ejercicio de la entrega CU00908C Clase Random
« Respuesta #2 en: 15 de Diciembre 2016, 19:30 »
Tienes toda la razón. Lo he corregido y he podido eliminar muchas líneas de código.
Muchas gracias por la corrección y un saludo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".