Olá pessoal,
Fiz várias pesquisas encontrei muita gente falando que resolveu o problema, mas cada um de uma forma diferente.
Eu só preciso de uma explicação de como resolver esse problema. Não preciso de código pronto, mas um exemplo pode ajudar.
Estou tentando fazer um programa que calcule o espaço amostral de uma combinação simples com 6 elementos tomados de 2 a 2.
É sabido que o espaço amostral dessa combinação possui 15 elementos de 2 números.
Exemplo:
1 - tenho os números de 1 a 6;
2 - quero lançar eventos de 2 números (ou seja, sortear de 2 números);
Desenvolvi o seguinte código, mas na execução sempre é ocorre a exceção java.util.ConcurrentModificationException.
Eu já vi inclusive o tópico: http://www.guj.com.br/java/30323-erro-com-collections-javautilconcurrentmodificationexception,
aqui do fórum, mas não entendi as soluções propostas e preciso de algumas explicações. Alguém pode me ensinar a pescar?
O código que desenvolvi é o seguinte:
(mais abaixo tem o log)
public void calcularEspacoAmostral() {
/*
* Lista, numeros para armazenar os elementos usados para tirar os eventos.
* Lista espacoAmostral que contém todos os elementos.
* Lista sublist que contém um evento.
*/
List<Integer> numeros = new ArrayList<Integer>();
List<List> espacoAmostral = new ArrayList<List>();
List<Integer> sublist = new ArrayList<Integer>();
//Criando os números
int n1 = 1;
while (n1 < 7) {
numeros.add(n1);
n1++;
}
long n2 = 0;
while (n2 < 16) {
Collections.shuffle(numeros); //Embaralha
sublist = numeros.subList(0, 2); //gera um novo elemento
Collections.sort(sublist); //ordena os elementos no novo elemento
if (n2 == 0) { //Adiciona o primeiro elemento ao espaço amostral.
espacoAmostral.add(sublist);
} else {
//A partir do primeiro elemento, o espaço amostral deve ser percorrido para comparar se a nova sublist já contém.
for (List l : espacoAmostral) {
if (l.contains(sublist)) {
System.out.println("Já contém.");
} else {
espacoAmostral.add(sublist);
}
}
}
System.out.println("Lista de sorteios: " + espacoAmostral.toString());
n2++;
}
}
Log:
0 - Lista de sorteios: [[3, 6]]
1 - Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at pacote.ProbabilidadeEEstatisticaController.calcularEspacoAmostral(ProbabilidadeEEstatisticaController.java:153)
at pacote.SorteioTeste.main(Teste.java:19)
