[Ajuda] Como limitar apenas em resultados de 18 numeros

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

Vc deve ter criado a classe mas não renomeou ela. O nome do: public class ...... tem que ser o mesmo nome do arquivo.

Isso eu fiz amigo…o meu java é o 1.8.0_202 64bits
sera isso?

Não, testei o código aqui e não deu erro. Isso é erro de nome de classe mesmo. Vc tá fazendo online?

Sua classe pública se chama LotoFacil entretanto esse nome não bate com o nome do arquivo .java que está como Lotofacil.

1 curtida

Boa tarde pessoal.

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.

Boa sorte a todos. :metal::sunglasses::metal:

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?

Puxa…o “f”…Comecei a fazer no eclipse para acelerar meu aprendizado e pude ver…Certissimo Abner e Staroski…
Só deu este erro agora:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

	at Lotofacil2.main(Lotofacil2.java:16)

abaixo a linha 16 com pane:

public class Lotofacil2 {
15 		public static void main(String[] args) {
16		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"}; 
17          List<SortedSet<Comparable>> allCombList = new ArrayList<SortedSet<Comparable>>(); //aqui vai ficar a resposta

Tem ideia?
Ahhh.coloquei la emcima o import java.lang.*; mas tambem nao deu…

Esses números aí estão no código também? No lado esquerdo do código “15, 16, 17”

List e ArrayList estão no pacote java.util, não java.lang.
Aliás, java.lang não precisa ser importado, é implícito.

nao nao…sao as linhas.