[quote=Lavieri]Separei em métodos em partes
[code]import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Urna {
/**
* Sorteia aleatoriamente as bolas da urna sem reposição, sendo a lista urna, sera
* alterada e ao final da operação ficará sem suas bolas.
* @param urna contem as bolas a serem sorteadas.
* @param numeroDeBolasASortear número de bolas a sortear
* @return o resultado do sorteio.
* @throws IllegalArgumentException Quando algum argumento é Illegal, por exemplo
* quando numeroDeBolasASortear é maior que a quantidade de bolas na urna,
* ou quando numeroDeBolasASortear ou tamanho da urna é igual a zero.
*/
public static int[] sorteiSemReposição(List urna,
int numeroDeBolasASortear) throws IllegalArgumentException {
if (numeroDeBolasASortear > urna.size())
throw new IllegalArgumentException("Quantidade de bolas a sortear maior que o número de bolas na urna");
if (numeroDeBolasASortear == 0)
throw new IllegalArgumentException("Quantidade de bolas a sortear não pode ser zero");
if (urna.size() == 0)
throw new IllegalArgumentException("A urna não pode estar vazia");
int[] resultados = new int[numeroDeBolasASortear];
Random roleta = new Random();
for (int i = 0; i < numeroDeBolasASortear; i++)
//pega uma bola aleatorea da urna (atraves da roleta), e a retirna
resultados[i] = urna.remove(roleta.nextInt(urna.size()));
return resultados;
}
/**
* Cria uma urna contendo o número de bolas enviadas, que inicia do número 1.
* @param numeroDeBolasNaUrna número de bolas que a urna contem.
* @return a urna pronta.
*/
public static List<Integer> createUrna(int numeroDeBolasNaUrna) {
return createUrna(numeroDeBolasNaUrna,1);
}
/**
* Cria uma urna contendo o número de bolas enviadas, que inicia do número numeroIncial.
* @param numeroDeBolasNaUrna número de bolas que a urna contem.
* @param numeroIncial número inicial da bola da urna.
* @return
*/
public static List<Integer> createUrna(int numeroDeBolasNaUrna,int numeroIncial) {
List<Integer> urna = new ArrayList<Integer>(numeroDeBolasNaUrna);
for (int i = 0; i < numeroDeBolasNaUrna; i++)
urna.add(i+numeroIncial);
return urna;
}
}[/code]
uma abordagem simples
public static void main(String[] args) {
for (int resultado : Urna.sorteiSemReposição(Urna.createUrna(25),15))
System.out.print(resultado + " | ");
}
o resultado foi
7 | 8 | 5 | 3 | 23 | 14 | 19 | 4 | 17 | 9 | 20 | 10 | 11 | 16 | 12 |
fazendo um sorteio + elaborado
public static void main(String[] args) {
List<Integer> urna = Urna.createUrna(25);
int[] resultados;
//retirar 15 bolas e imprimir
{
System.out.print("Retira 15 bolas: | ");
resultados = Urna.sorteiSemReposição(urna,15);
//imprimindo resultado
for (int resultado : resultados)
if (resultado < 10)
System.out.print(" "+ resultado + " | ");
else
System.out.print(resultado + " | ");
System.out.println(); //apenas para dar um espaço
}
//retirar +5 bolas e imprimir
{
System.out.print("Retira +5 bolas: | ");
resultados = Urna.sorteiSemReposição(urna,5);
//imprimindo resultado
for (int resultado : resultados)
if (resultado < 10)
System.out.print(" "+ resultado + " | ");
else
System.out.print(resultado + " | ");
System.out.println(); //apenas para dar um espaço
}
//imprimir as bolas que sobraram
{
System.out.print("Bolas restantes: | ");
for (int bolas : urna)
if (bolas < 10)
System.out.print(" "+ bolas + " | ");
else
System.out.print(bolas + " | ");
}
}
o resultado foi
Retira 15 bolas: | 24 | 12 | 21 | 16 | 19 | 20 | 13 | 3 | 17 | 5 | 25 | 6 | 10 | 15 | 7 |
Retira +5 bolas: | 1 | 4 | 14 | 18 | 2 |
Bolas restantes: | 8 | 9 | 11 | 22 | 23 |
[/quote]
muito loco veio… só me explica por favor q q 2 coisas que fiquei com duvida, que que essa pagina 30 faiz ( resultados[i] = urna.remove(roleta.nextInt(urna.size())); ), e esses <Integer>(isso é aquele negocio de classe Wrapper?)…
vlw abracos!!