Problema con bucles for/do-while/while
Publicado por Abel (6 intervenciones) el 06/01/2019 19:45:00
Buenas a todos, tengo un problema con los bucles. Tengo un proyecto el cual se tiene que repetir 1,000 veces pero no se por qué, cada vez que lo ejecuto, se repite unas 900 veces. Cada vez que lo ejecuto se repite de forma diferente, unas 980, otras 970 y no se por qué nunca llega a 1,000.
En el proyecto tengo un array (llamada alumnos) la cual relleno con los valores [1,30]. En esa array tengo que sacar, por así decirlo, un ganador. Para ello lo que se hace es crear un random con valores [1,30]. Con ese random voy "eliminando" números del array alumnos, cada vez que sale un random le pongo un -1 en la misma posicion del array, asi hasta que quede un único numero en alumnos, y esa posición será la "ganadora". Por ello utilizo el contador<29 para salir del bucle, cuando se coloquen 29 veces el -1 ya puedo salir del bucle porque tengo un ganador.
Entonces, con el ganador lo que hago es incluirlo en otra array (llamada delegado), esa array ira aumentando las veces que han salido ganadores esas posiciones. Y esto tiene que hacerlo 1,000 veces, para poder determinar que posicion ha salido ganadora más veces. Muchas gracias y un saludo. Dejo aquí el código.
En el proyecto tengo un array (llamada alumnos) la cual relleno con los valores [1,30]. En esa array tengo que sacar, por así decirlo, un ganador. Para ello lo que se hace es crear un random con valores [1,30]. Con ese random voy "eliminando" números del array alumnos, cada vez que sale un random le pongo un -1 en la misma posicion del array, asi hasta que quede un único numero en alumnos, y esa posición será la "ganadora". Por ello utilizo el contador<29 para salir del bucle, cuando se coloquen 29 veces el -1 ya puedo salir del bucle porque tengo un ganador.
Entonces, con el ganador lo que hago es incluirlo en otra array (llamada delegado), esa array ira aumentando las veces que han salido ganadores esas posiciones. Y esto tiene que hacerlo 1,000 veces, para poder determinar que posicion ha salido ganadora más veces. Muchas gracias y un saludo. Dejo aquí el código.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package delegadocasa;
import java.util.Random;
/**
*
* @author Abel
*/
public class DelegadoCasa {
public static void main(String[] args) {
int valor,contador=0,cont=0;
int[] alumnos=new int [30];
int[] delegado=new int [30];
Random rand=new Random();
for (int j = 0; j < 1000; j++) {
for(int i=0;i<alumnos.length;i++){
alumnos[i]=i+1;
}
contador=0;
do{
for(int i=0;i<alumnos.length;i++){
valor=rand.nextInt(30)+1;
while(alumnos[i]==valor){
alumnos[i]=-1;
contador++;
}
}
}while(contador<29);
for(int i=0;i<alumnos.length;i++){
if(alumnos[i]!=-1){
delegado[i]++;
cont++;
}
}
}
for(int n:delegado){
System.out.print(n+" ");
}
System.out.println(" ");
System.out.println(cont);
}
}
Valora esta pregunta


0