Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Erik_Escriche en 14 de Diciembre 2016, 19:43
-
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:
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.
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!
-
Buenos días.
Tu código daría el resultado pedido,pero la clase main se podría reducir bastante:
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
-
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.