Erro na busca de valor dentro de um Array

Boa noite, galera.
Estou desenvolvendo um bingo em Java, onde ele sorteia aleatoriamente um número entre 1 e 20. Até aqui tudo certo. Porém eu quero que não repita nenhum número, para isso estou tentando utilizar o binarySearch desta forma:

do {
int aleatorio = (int) (1 + Math.random() * (21 - 1));

        Arrays.sort(vetor);
        busca = Arrays.binarySearch(vetor, aleatorio);
        txtBusca.setText(Integer.toString(busca)); //txtField apenas para visualizar a variável busca
        
        if (busca < 0) {
            vetor[contador] = aleatorio;
            contador++;
            numero(aleatorio); //método para marcar a label do número sorteado
        }
        
    } while (busca >= 0);

Não sei a causa, mas minha variável “busca” sempre vem negativa. Em algumas pesquisas, vi algumas soluções onde era para utilizar o “Arrays.sort(vetor)” para funcionar corretamente, mas não funcionou.

Um jeito mais simples de obter o que você quer é colocar os elementos em um List e usar Collections.shuffle() para embaralhar. Toda vez que quiser sortear um número, você pega da posição zero, até que sorteie todos os que quer, ou acabem os números.

Outra opção, se ainda quiser usar um array comum (em vez de List/ArrayList), é usar um algoritmo de embaralhamento que opere sobre arrays. Nesse link há exemplos dessas duas opções, e se procurar por embaralhar aqui no GUJ, deve se deparar com outros exemplos.

Abraço.

1 curtida

Como funciona o bingo no mundo real?

Os caras geram números aleatórios e caso o número já tenha sido sorteado geram outro?

Ou os caras põe uma série de bolinhas numeradas, não repetidas, em um globo e vão removendo as bolinhas aleatoriamente?
:wink:

Dê uma olha na classe GloboDaSorte disponível neste post.

1 curtida

Muito obrigado amigos, consegui fazer desta forma.
Implementei um pouquinho mais e fiz um sorteador de letras.
Depois vou brincar um pouquinho mais e colocar para ter som também.