Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Luis Fdo Carvajal en 17 de Mayo 2017, 22:39
-
Buenas tardes,
:-[
Dejo el ejercicio uno y dos de la entrega CU00909C del tutorial de programación avanzada en Java, sólo que en el segundo, sinceramente llevo varios días y a un no logro hallar la manera de como hacer que el random no genere números repetidos. Agradecería algo de apoyo.
EJERCICIO Nº 1(CU00909C)
package random_3;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author ITCO1724
*/
public class Random_3 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int a = 0, b = 0;
String apuesta = "";
String empezar = "";
int contadorAciertos = 0;
int contadorFallos = 0;
Scanner sc = new Scanner(System.in);
do{ Random rnd = new Random();
//Generar dos números a y b entre cero y 100
a = rnd.nextInt(101);
b = rnd.nextInt(101);
//Mostrar por pantalla los números random generados
/*System.out.println(a);
System.out.println(b);*/
System.out.println (" Vamos a adivinar quien es el numero más alto A O B: ");
System.out.print("Introduce tu apuesta A/B : ");
apuesta = sc.nextLine();
if (apuesta.equalsIgnoreCase("a") && (a>b) || apuesta.equalsIgnoreCase("b") && (a<b)) {
contadorAciertos++;
System.out.println("A saca un " + a + " y B saca un " + b + " HAS GANADO :!!!");
System.out.println("Llevas " + contadorAciertos + " partidas ganadas y " + contadorFallos + " partidas perdidas");}
else {
contadorFallos++;
System.out.println("A saca un " + a + " y B saca un " + b + " HAS PERDIDO!!! :");
System.out.println("Llevas " + contadorAciertos + " partidas ganadas y " + contadorFallos + " partidas perdidas");}
System.out.println("Quieres probar otra vez ? (s/n) : ");
empezar = sc.nextLine();
}
while (empezar.equalsIgnoreCase("s"));
System.out.println("Adios");
}
}
EJERCICIO Nº 2(CU00909C)
package loteria;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author ITCO1724
*/
public class Loteria {
public static void main(String[] args) {
int a,b,c,d,e,f;
int i,j,aux;
int contadorAciertos = 0;
int contadorFallos = 0;
String empezar = "";
int[] random = new int [6];
int[] numeros = new int[6];
Scanner sc = new Scanner(System.in);
Random rnd = new Random();
//Generar seis números a y b entre 1 y 49
a = rnd.nextInt(50); b = rnd.nextInt(50); c = rnd.nextInt(50); d = rnd.nextInt(50); e = rnd.nextInt(50); f = rnd.nextInt(50);
random[0] = a; random[1] = b; random[2] = c; random[3] = d; random[4] = e; random[5] = f;
/*System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d);
System.out.println(e);System.out.println(f);*/
/*random[0]=rnd.nextInt(50);random[1]=rnd.nextInt(50);random[2]=rnd.nextInt(50);random[3]=rnd.nextInt(50);
random[4]=rnd.nextInt(50);random[5]=rnd.nextInt(50);*/
//Mostrar por pantalla los números random generados
for ( i= 0; i<=5; i++){
System.out.print(random[i]+ ", ");
}
//Ordenar arreglo de menor a mayor
for ( i= 0; i<=5; i++){
for (j=i+1; j<=5; j++){
if ( random[i]>random[j]){
aux = random[i];
random[i] = random[j];
random[j] = aux;
}
}
}
//presentar arreglo ordenado de menor a mayor
for ( i= 0; i<=5; i++){
System.out.print(random[i]);}
do{
System.out.println();
System.out.println (" Vamos a jugar a la Lotería primitiva ");
System.out.print("Introduce tus seis numeros de apuesta entre el 1 y 49 : ");
System.out.print("No puedes repetir numeros: ");
for(i = 0; i <= 5; i++) {
System.out.print("\n"+ "Elige el numero "+ (i+1) + ":" );
numeros[i] = sc.nextInt();}
//Ordenar arreglo de menor a mayor los numeros elegidos
for ( i= 0; i<=5; i++){
for (j=i+1; j<=5; j++){
if ( numeros[i]>numeros[j]){
aux = numeros[i];
numeros[i] = numeros[j];
numeros[j] = aux;
}
}
}
//Mostrar por pantalla los números elegidos
for(i = 0; i <= 5; i++) {
System.out.print(numeros[i]);}
System.out.print("\n"+"La combinación Ganadora es :");
for(i = 0; i <= 5; i++) {
//System.out.print("La combinación Ganadora es :" );
System.out.print(random[i]);}
//Comparar ambos arreglos
System.out.println (("\n"+"¿Tienen el mismo contenido (relación de igualdad ambas combinaciones)? ... " + Arrays.equals(random, numeros) ) );
if (Arrays.equals(random, numeros)==true){
System.out.println("EN HORA BUENA !!!HAS HACERTADO!!");}
else {
System.out.println(" !!!No has acertado!!");}
//Comparación de arreglos
for (i=0; i<6; i++){
System.out.print ("\n"+"random[" + i +"]= " + random[i] +"; ");
System.out.print ("\n"+"numeros[" + i +"]= " + numeros[i]+"; "); }
//Arrays.equals(random, numeros);
if (random[0] != numeros[0] ){
contadorFallos++;
System.out.println("\n"+"Has perdido : " + (contadorFallos)+ "Cifra" );}
else {
contadorAciertos++;
System.out.println("\n"+"Has acertado : " + (contadorAciertos)+ "Cifra" );}
if (random[1] != numeros[1] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else{
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[2] != numeros[2] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else {
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[3] != numeros[3] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else{
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[4] != numeros[4] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else {
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[5] != numeros[5] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else{
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[6] != numeros[6] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else {
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
System.out.println("Quieres probar otra vez ? (s/n) : ");
empezar = sc.nextLine();
}
while (empezar.equalsIgnoreCase("s"));
System.out.println("Adios");
}
}
Saludos
:-[ :-[ :-[ :-[
-
en el segundo, sinceramente llevo varios días y a un no logro hallar la manera de como hacer que el random no genere números repetidos. Agradecería algo de apoyo.
Una forma que se me ocurre, usando los elementos básicos disponibles a este nivel (con Clases y Programacion Orientada Objetos podría ser más fácil), es la siguiente:
Sería recorrer el arreglo/vector/array (como queramos llamarlo...) y por cada una de sus posiciones, generar un numero random.
Antes de aceptarlo, volver a recorrer de nuevo el vector y comprobar si el numero random ya existe en el o no.
Si no existe, lo aceptamos y pasamos a la siguiente posicion.
Si existe, entonces lo descartamos, volvemos a generar otro y repetimos la misma comprobacion.. así hasta que se genere un numero que no exista.
Entonces, para hacer esto, se necesitaría tres bucles anidados:
Primero, un bucle for que recorra las posiciones del vector, una a una...
Segundo, un bucle do...while donde se generarán números random mientras dichos números estén siendo descartados. Solo se detendrá cuando el número random haya sido aceptado.
Tercero, otro bucle for (uso un for each en este caso) que recorre todo el vector y comprueba si el numero random existe o no.
Si existe, indicaremos al bucle while que el número ha sido descartado para que siga repitiendose.
Si no existe, lo aceptamos y le indicaremos al while que ya puede terminar.
Esto se lo comunicaremos con una variable booleana, que yo he llamado descartado
Te adjunto un programa donde se hace esto, para que lo veas y decidas si quieres incluirlo en tu programa.
Por curiosidad, he incluido un contador de numeros descartados. Así al final del programa se muestran los números generados al azar y también se informa de cuantos números han sido descartados durante el proceso.
import java.util.Random;
public final class SinRepetir {
public static void main(String[] args) {
Random rn = new Random();
int[] numeros = new int[10];//Aqui indicamos cuantos queremos generar, 10 en este caso
boolean descartado;
int contDescartados = 0; //Por curiosidad, contaremos cuantos numeros random serán descartados
/*
* Recorreremos las posiciones del vector una a una.
* Para cada una de ellas, generaremos un numero al azar y antes de aceptarlo
* volveremos a recorrer el vector completo para comprobar si el numero generado
* ya existe en el vector.
* Si no existe, lo aceptaremos y pasaremos a la siguiente posicion.
* Si existe, es decir, está repetido, lo descartaremos y volveremos a generar otro
* hasta que aparezca uno que no exista
*/
for (int i = 0; i < numeros.length; i++)
{
do//Este bucle se repetirá hasta que salga un numero random no repetido, es decir, mientras descartado == true
{
int numeroRandom = rn.nextInt(50) + 1;//Generamos entero entre 1 y 50
descartado = false;//De momento, el numero no está descartado
//Ahora recorremos el vector completo y comprobamos si el numero generado ya existe dentro de él
for (int numVector: numeros)
{
if (numVector == numeroRandom)//EL numero generado ya existe en el vector, hay que descartarlo
{
descartado = true;//Lo descartamos
contDescartados++;//Contamos el descarte, por curiosidad...
break;//Finalizamos bucle for, no hace falta seguir comparando
}
}
//Tras comprobar si el numero estaba repetido, ahora decidimos si aceptamos el numero random generado
if (!descartado)//No ha sido descartado, lo aceptamos. El bucle do..while terminará y pasaremos al siguiente numero del vector
numeros[i] = numeroRandom;
}while (descartado);
}
//Mostramos números generados
for (int n: numeros)
System.out.print(n + " ");
System.out.println("\nSe han descartado " + contDescartados + " numeros random");
}
}
-
:)
Gracias por las indicaciones.
Creo que ya hallé la manera.
package loteria;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author ITCO1724
*/
public class Loteria {
public static void main(String[] args) {
int a,b,c,d,e,f;
int i,j,aux;
int contadorAciertos = 0;
int contadorFallos = 0;
String empezar = "";
int[] random = new int [6];
int[] numeros = new int[6];
//int[] randomclon = new int [6];
Scanner sc = new Scanner(System.in);
Random rnd = new Random();
//Generar seis números a y b entre 1 y 49
a = rnd.nextInt(50); b = rnd.nextInt(50); c = rnd.nextInt(50); d = rnd.nextInt(50); e = rnd.nextInt(50); f = rnd.nextInt(50);
random[0] = a; random[1] = b; random[2] = c; random[3] = d; random[4] = e; random[5] = f;
/*System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d);
System.out.println(e);System.out.println(f);*/
/*random[0]=rnd.nextInt(50);random[1]=rnd.nextInt(50);random[2]=rnd.nextInt(50);random[3]=rnd.nextInt(50);
random[4]=rnd.nextInt(50);random[5]=rnd.nextInt(50);*/
//Comparar los elementos del arreglo para no repetir numero
for ( i= 0; i<=5; i++){
for (j=i+1; j<=5; j++){
if ( random[i] == random[j]){
aux = random[i];
random[i] = random[j+1];
random[j] = aux;
}
}
}
//Mostrar por pantalla los números random generados
for ( i= 0; i<=5; i++){
System.out.print(random[i]+ ", ");
}
//Ordenar arreglo de menor a mayor
for ( i= 0; i<=5; i++){
for (j=i+1; j<=5; j++){
if ( random[i]>random[j]){
aux = random[i];
random[i] = random[j];
random[j] = aux;
}
}
}
//presentar arreglo ordenado de menor a mayor
for ( i= 0; i<=5; i++){
System.out.print(random[i]);}
do{
System.out.println();
System.out.println (" Vamos a jugar a la Lotería primitiva ");
System.out.print("Introduce tus seis numeros de apuesta entre el 1 y 49 : ");
System.out.print("No puedes repetir numeros: ");
for(i = 0; i <= 5; i++) {
System.out.print("\n"+ "Elige el numero "+ (i+1) + ":" );
numeros[i] = sc.nextInt();}
//Ordenar arreglo de menor a mayor los numeros elegidos
for ( i= 0; i<=5; i++){
for (j=i+1; j<=5; j++){
if ( numeros[i]>numeros[j]){
aux = numeros[i];
numeros[i] = numeros[j];
numeros[j] = aux;
}
}
}
//Mostrar por pantalla los números elegidos
for(i = 0; i <= 5; i++) {
System.out.print(numeros[i]);}
System.out.print("\n"+"La combinación Ganadora es :");
for(i = 0; i <= 5; i++) {
//System.out.print("La combinación Ganadora es :" );
System.out.print(random[i]);}
//Comparar ambos arreglos
System.out.println (("\n"+"¿Tienen el mismo contenido (relación de igualdad ambas combinaciones)? ... " + Arrays.equals(random, numeros) ) );
if (Arrays.equals(random, numeros)==true){
System.out.println("EN HORA BUENA !!!HAS HACERTADO!!");}
else {
System.out.println(" !!!No has acertado!!");}
//Comparación de arreglos
for (i=0; i<6; i++){
System.out.print ("\n"+"random[" + i +"]= " + random[i] +"; ");
System.out.print ("\n"+"numeros[" + i +"]= " + numeros[i]+"; "); }
//Arrays.equals(random, numeros);
if (random[0] != numeros[0] ){
contadorFallos++;
System.out.println("\n"+"Has perdido : " + (contadorFallos)+ "Cifra" );}
else {
contadorAciertos++;
System.out.println("\n"+"Has acertado : " + (contadorAciertos)+ "Cifra" );}
if (random[1] != numeros[1] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else{
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[2] != numeros[2] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else {
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[3] != numeros[3] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else{
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[4] != numeros[4] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else {
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[5] != numeros[5] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else{
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
if (random[6] != numeros[6] ){
contadorFallos++;
System.out.println("Has perdido : " + (contadorFallos)+ "Cifras" );}
else {
contadorAciertos++;
System.out.println("Has acertado : " + (contadorAciertos)+ "Cifras" );}
System.out.println("Quieres probar otra vez ? (s/n) : ");
empezar = sc.nextLine();
}
while (empezar.equalsIgnoreCase("s"));
System.out.println("Adios");
}
}