Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda con ejercicio random

En un sorteo de lotería se realizan 20 extracciones de bolas (puede ser automática o pedida al usuario) cuyos
valores están comprendidos entre el 0 y el 9. Después de realizar una extracción la bola se reintegra de nuevo
al bombo de extracciones. Debemos hacer una ordenación (de mayor a menor) por número de repeticiones.
Además se visualizará el número de repeticiones.

Entrada (para el caso de que en vez de 20 fueran 100 las entradas):
0 3 1 6 7 6 5 3 9 1 0 4 4 5 0 3 2 6 0 7 4 9 9 1 3 0 8 8 5 5 1 5 5 1 2 5 0 0 3 7 0 9 4 1 2 2 8 6 8 5 5 2 3
0 7 5 9 7 6 2 1 1 7 6 4 1 3 6 0 4 1 3 1 0 6 4 9 0 5 0 0 4 7 0 8 8 9 1 2 9 1 2 2 6 1 3 0 7 7 0
Salida (para el caso de esas 100 entradas):
0 17
1 14
5 11
2 9
3 9
6 9
7 8
4 8
9 8
8 6

agosto 27, 2012 | Unregistered CommenterPascual

¿ Podéis ayudarme a resolver este ejercicio? no se ni por donde empezar...
supongo que tendré que utilizar random y entrada por teclado.... espero que me ayudéis gracias.

agosto 27, 2012 | Unregistered CommenterPascual

hola pascual, bueno no se que tanto sabes de programacion, bueno asumire que sabes lo necesario.

si entiendo bien el programa debe tener la opción de generar aleatoria mente una secuencia de numeros, y tambien puede ser ingresada por el usuario.

bueno enfoquemonos en que tu generaras esos x numeros aleatorios, para eso necesitas un vector para ir almacenando los numeros generados

ya que necesitas que solo sean de numeros de 0 a 9, yo te recomendaria que uses esta funcion Math.random();
un ejemplo de uso;
int num_aleatorio=(int)(Math.random()*10);
esto te permetira obtener números aleatorios(pseudo aleatorios) del 0 al 9.

una sugerencia de meter estos numeros aleatorios al vector es esta

int [] numeros=new int[20];
int num_aleatorio;
for(int i=0;i<numeros.length;i++){
num_aleatorio=(int)(Math.random()*10);
numeros[i]=num_aleatorio;
}

la forma de saber cuales numeros estan repetidos es hacer otro vector
ya que sabes que son 10 numeros que se generaran(del 0-9)

entonces lo unico que haces es llevar en el vector contador el numero que aparece

ejemplo (sugerencia):

int contador[]=new int[10];

for(int i=0;i<numeros.length;i++){
switch(numeros[i]){
case 0: contador[0]+=1;
break;
case 1: contador[1]+=1;
break;
..// etc
case 9: contador[9]+=1;

}
}//fin de for

bueno eso son algunas ideas espero que te ayude

agosto 28, 2012 | Registered Commenterjhosep

Muchas gracias jhosep, me ha servido de gran ayuda, lo que no tengo muy claro es en el "for" dentro de los paréntesis declaras una variable "i" ya lo he visto en varios ejercicios y no se si es algo que se debe de poner por defecto o puedes declarar otra variable antes del "for" y después llamarla .

ahora tengo el programa prácticamente echo. ¿como puedo ordenarlo segun el numero repeticiones de cada numero?

agosto 30, 2012 | Unregistered CommenterPascual

a lo de la variable i, si es opcional la puedes declarar ahi como yo lo hago o solo inicializar otra variable declarada. si te fijas el for se compone de tres partes en su declaracion como lo describo a continuacion.

fo(inicializacion o declaracion de variables ; condicion ;incremento,decremento o cualquier otra operacion arimetica)
{cuerpo del for}
, la segunda area( condicion ) y la tercera( incremento,etc) es la que se ejecuta en cada interacion, la primera solo se ejecuta al iniciar por primera ves el ciclo.
como ves esas tres areas tienes del for y puedes hacer lo que tu quieras lo normal es esto
for(x=0;x<tam;x++)

incluso puedes hacer eso
x=0;
for( ;x<tam;x++){cuerpo}
espero ver aclarado tus dudas.
----------------------------------------------------------------------------------------
lo de ordenamiento existe un monton de algoritmos en la red para ello
desde ordenamiento de burbuja (que es uno de los màs lentos) hasta los màs rapidos como el quick sort .

bueno el màs facil de hacer es el de burbuja pero es el màs lento de todos.
El de burbuja se basa en comparar dos valores del vector he intercambiarlos segun el criterio
eso necesita varias pasadas que en el peor caso es n^2 es decir el cuadrado del numero de datos que tienes en el vector

una implementacion seria esta:
int tam=contador.lenght;//tamaño del vector
int temp;//aqui guardas temporalmente un valor del vector para el intercambio
//contador es el supesto vector donde guardas los numeros de veces que se repiten
for (int i = 1; i < tam; i++) {
//El for interno hace una verificacion desde el ultimo elemento hasta la posicion i
for (int j= tam - 1; j >=i ; j--){
//aqui dice haces que se ordene de mayor a menor
//para hacerlo de menor a mayor solo intercambia > por < y listo.
if (contador[j] > contador[j-1])
{
temp =contador[j];
contador[j] =contador[j -1];
contador[j-1] = temp;
}
}
}

links de ayuda:
http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento
http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja
http://www.neoteo.com/quicksort-algoritmo-de-ordenamiento-rapido
http://saforas.wordpress.com/2008/06/10/metodos-de-ordenamiento-hecho-en-java/

bueno aqui tienes para divertirte espero verte ayudado

agosto 30, 2012 | Registered Commenterjhosep