Como imprimir uma Combinação de números sem repetição? JAVA

Eu sei que terão combinações com repetição, mas preciso que ele imprima somente as combinações não repetidas. Com um array de 4 endereços eu consigo criar uma condição com if, mas preciso que o array de combinações tenha 20 endereços então o if fica muito grande e a ide fala que o algoritmo é muito complexo.

//ARRAY COM NUMEROS
int[] numeros = new int[]{
0, 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, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99
};

//ARRAY QUE GUARDARA AS 20 COMBINAÇÕES
int[] combinacao = new int[20];

//FAZ TODAS AS COMBINAÇÕES POSSÍVEIS
int indiceCombinacao = 0;

for (int numero : numeros) {
    combinacao[0] = numero;

for (int numero1 : numeros) {
    combinacao[1] = numero1;

for (int numero2 : numeros) {
    combinacao[2] = numero2;

for (int numero3 : numeros) {
    combinacao[3] = numero3;

for (int numero4 : numeros) {
    combinacao[4] = numero4;

for (int numero5 : numeros) {
    combinacao[5] = numero5;

for (int numero6 : numeros) {
    combinacao[6] = numero6;

for (int numero7 : numeros) {
    combinacao[7] = numero7;

for (int numero8 : numeros) {
    combinacao[8] = numero8;

for (int numero9 : numeros) {
    combinacao[9] = numero9;

for (int numero10 : numeros) {
    combinacao[10] = numero10;

for (int numero11 : numeros) {
    combinacao[11] = numero11;

for (int numero12 : numeros) {
    combinacao[12] = numero12;

for (int numero13 : numeros) {
    combinacao[13] = numero13;

for (int numero14 : numeros) {
    combinacao[14] = numero14;

for (int numero15 : numeros) {
    combinacao[15] = numero15;

for (int numero16 : numeros) {
    combinacao[16] = numero16;

for (int numero17 : numeros) {
    combinacao[17] = numero17;

for (int numero18 : numeros) {
    combinacao[18] = numero18;

for (int numero19 : numeros) {
    combinacao[19] = numero19;

// IMPRIME
indiceCombinacao++;

     System.out.println("Combinação "
      + indiceCombinacao + ": "
      + combinacao[0] + " - "
      + combinacao[1] + " - "
      + combinacao[2] + " - "
      + combinacao[3] + " - "
      + combinacao[4] + " - "
      + combinacao[5] + " - "
      + combinacao[6] + " - "
      + combinacao[7] + " - "
      + combinacao[8] + " - "
      + combinacao[9] + " - "
      + combinacao[10] + " - "
      + combinacao[11] + " - "
      + combinacao[12] + " - "
      + combinacao[13] + " - "
      + combinacao[14] + " - "
      + combinacao[15] + " - "
      + combinacao[16] + " - "
      + combinacao[17] + " - "
      + combinacao[18] + " - "
      + combinacao[19]
      );

Só pode usar arrays?

1 curtida

for (int derepeater = 0; derepeater < arraySize; derepeater++)
{
for (int j = 0; j < arraySize; j++)
{
for (int i = arraySize; i > 0; i–)
{
if (Compare[j] == Compare[i] && j != i)
{
Compare[j] = rand() % upperlimit + 1;
}
}
}
}

1 curtida

A fonte de informação desse problema eu achei aqui non repeating random number generator

1 curtida

Ja pensou em usar um Set ?

se o set nao aceita numeros repetidos, vc pode:

a) descobrir se uma sequencia possui numeros repetidos comparando o tamanho dessa sequencia com o tamanho do set.

b) para imprimir a sequencia de numeros não repetidos, ora vc tem o Set :slight_smile:

1 curtida

Acredito que será a melhor forma de armazenar os dados

@peczenyj Sou iniciante em java, ainda não utilizei o set. Vou verificar como ele pode ser útil na minha aplicação. Obrigado!

Sou iniciante em java, compreendi em partes a função desse script, tem alguns comandos que não conhecia. Poderia me mostrar como seria a aplicação dele no meu código?

Vou ser honesto, eu procurei algo pra você pensar em como faria isso na sua lógica , infelizmente acho melhor você solicitar ao Darlan Machado.

1 curtida