Tenho um código pra gerar todas as combinações possiveis dentre 25 números, eu precisava que ele me mostrasse somente as combinações com 18 números, onde eu colocaria essa condição?
desde já, agradeço.
package lotofacil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class LotoFacil {
/**
* @param args
*/
public static void main(String[] args) {
String[] status = new String[] { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25"}; //aqui pode ser qualquer objeto que implemente Comparable
List<SortedSet<Comparable>> allCombList = new ArrayList<SortedSet<Comparable>>(); //aqui vai ficar a resposta
for (String nstatus : status) {
allCombList.add(new TreeSet<Comparable>(Arrays.asList(nstatus))); //insiro a combinação "1 a 1" de cada item
}
for (int nivel = 1; nivel < status.length; nivel++) {
List<SortedSet<Comparable>> statusAntes = new ArrayList<SortedSet<Comparable>>(allCombList); //crio uma cópia para poder não iterar sobre o que já foi
for (Set<Comparable> antes : statusAntes) {
SortedSet<Comparable> novo = new TreeSet<Comparable>(antes); //para manter ordenado os objetos dentro do set
novo.add(status[nivel]);
if (!allCombList.contains(novo)) { //testo para ver se não está repetido
allCombList.add(novo);
}
}
}
Collections.sort(allCombList, new Comparator<SortedSet<Comparable>>() { //aqui só para organizar a saída de modo "bonitinho"
@Override
public int compare(SortedSet<Comparable> o1, SortedSet<Comparable> o2) {
int sizeComp = o1.size() - o2.size();
if (sizeComp == 4) {
Iterator<Comparable> o1iIterator = o1.iterator();
Iterator<Comparable> o2iIterator = o2.iterator();
while (sizeComp == 4 && o1iIterator.hasNext() ) {
sizeComp = o1iIterator.next().compareTo(o2iIterator.next());
}
}
return sizeComp;
}
});
System.out.println(allCombList);
}
}
Pessoal, fui rodar esse Lotofacil agora em 2019…deu esse erro:
D:>javac Lotofacil.java
Lotofacil.java:12: error: class LotoFacil is public, should be declared in a file named LotoFacil.java
public class LotoFacil {
^
Note: Lotofacil.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
Alguem saberia a correção? me parece interessante esse código
obrigado
Dei uma olhadinha nesse post e gostei dessa proposta de probabilidade e estatística e achei o código muito engessado e complicado. Também percebi que ninguém respondeu como fazer só com 18 números, por isso resolvi fazer um método para fazer isso também.
public class LotoFacil {
/**
* @param args
*/
public static void main(String[] args) {
LotoFacil lf = new LotoFacil();
String[] status = new String[]{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25"};
lf.calculoPossibilidades(status).forEach(item -> System.out.println(item));
}
/**
* Este método faz todas as combinações possíveis com um array de números
*
* @param status
* @return Lista contendo uma lista de possiblidades
*/
public List<List<Object>> calculoPossibilidades(Object[] status) {
List<Object> lista = Arrays.asList(status);
List<List<Object>> resultado = new ArrayList();
resultado.add(lista);
int possibilidades = lista.size() * (lista.size() - 1);
System.out.println(String.format("Este array pode ter até %d combinações", possibilidades));
for (int b = 0; b < lista.size(); b++) {
List<Object> l = new ArrayList();
Object alvo = lista.get(b);
int quant = b == lista.size() - 1 ? lista.size() - 2 : lista.size() - 1;
l.addAll(resultado.get(resultado.size() - 1));
for (int p = 0; p < quant; p++) {
int position = l.indexOf(alvo);
if (l.get(p).equals(alvo)) {
l.remove(alvo);
l.add(position + 1, alvo);
}
resultado.add(new ArrayList(l));
}
}
System.out.println(String.format("Consegui realizar %d combinações", resultado.size()));
return resultado;
}
}
Respondendo o tópico: caso queira a combinação com apenas 18 números, informe apenas 18 números.
Quem quiser melhorar o código ou que tenha mais conhecimentos em cálculos de probabilidade, por favor o faça, vai ser muito bom para o aperfeiçoamento de todos.
Opa…estou com varias ideias pessoal…vamos tomar coca-cola junto…hehe
Seguinte, fui copiar/colar esse codigo no meu eclipse e gerou 11erros.:
Exception in thread "main" java.lang.NoClassDefFoundError: List
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: List
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
Fiz uma breve analise e nao vi algo discrepante…mas sera?