Números aleatórios sem repetir - Pode ser com recursão?

6 respostas
pvrsouza

Galera,

Eu estava dando uma lida sobre Loop Recursivo e vi duas aplicações simples: uma ém fibonnacci e outra em fatorial. Em paralelo eu estava tentando fazer um vetor de números aleatórios não repetidos e me surgiu a dúvida:Eu poderia chegar a este mesmo resultado ( números aleatórios sem se repetir ) usando recursão?

[size=9]P.S: Sei que eu poderia usar ArrayList ou HashMap para esta solução, mas preferi usar o vetor simplesmente para praticar a lógica.[/size]

Vejam como eu fiz(sem recursão):

public class ChecaVetor {

    public static void main(String[] args) {
        int numRandom;
        int[] vetorAuxiliar = new int[9];
        boolean existe = false;

        for (int x = 0; x < vetorAuxiliar.length; x++) {
            existe = false;
            numRandom = (int) ((Math.random() * 9) + 1);
            for (int y = 0; y < vetorAuxiliar.length; y++) {
                if (vetorAuxiliar[y] == numRandom) {
                    existe = true;
                    x--;

                }
            }
            if(existe == false){
                vetorAuxiliar[x] = numRandom;
            }
        }
        
        for(int z=0;z<vetorAuxiliar.length;z++){
            System.out.print(vetorAuxiliar[z]+",");
        }
    }
}

6 Respostas

Tchello

Por que você não usa um set?
edit: Ooops, só lí a parte do seu “P.S.” agora.

pvrsouza

Hehehehe. O P.S tava minúsculo!

Eu ainda não estudei ArrayList nem Hashmap. Mesmo sabendo que seria possível implementar usando.

Tchello

É verdade, tava bem pequeno hehehe

Então, se você não quer duplicatas um Set seria a escolha ideal, bastando apenas se decidir em qual implementação quer (TreeSet, HashSet, LinkedHashSet, etc…), uma vez que Sets, por padrão, não aceitam duplicatas, ai você não teria que esquentar a cabeça com isso.

Abraços.

pvrsouza

É. Eu vou dar uma olhada nestas estruturas.

Brigadão!

Tchello

Que isso cara.

Viu, um estudo aprofundado de Estrutura de dados e das Collections de java em sí é algo que eu (e garanto que muito mais gente aqui do forum) recomendo fortemente.
Coisas básicas de estruturas de dados e da Collections costumam ser ignorados por muita gente, o que não deveria, que acaba acarretando numa perda desnecessária de performance e escalabilidade do código.

Dois casos muito comuns são:

  • Desconhecer as estruturas implementadas existentes na Collections e como elas funcionam (ai entra ED).
  • Programar orientado a interface: não estou falando de GUI, mas usar sempre como declaração uma interface, por exemplo ao invez de fazer assim:
ArrayList<String> lista = new ArrayList();

fazer assim:

List<String> lista = new ArrayList();

Feito isso você pode alternar a sua implementação de ArrayList para Vector (argh), LinkedList, etc livremente, sem precisar sair mudando tipo de retorno de método, etc e tal, uma vez que todas essas citadas são implementações de List.

E isso não vale só pra Collections.

Consegui ser claro? São dois casos básicos, entre outros, como escolher corretamente a sua implementação, o que implica no primeiro caso: conhecer as implementações existentes e como funcionam.

Qualquer dúvida posta ae, garanto que há milhões (exageros a parte) de tópicos aqui no GUJ que poderão te auxiliar.

Abraços.

pvrsouza

É verdade. Tenho que parar para estudar Estrutura de Dados! Eu já colecionei um material bom sobre isso e já coloquei no meu calendário de estudos para comecar!

Vou dar uma estudada nestas estruturas, emergencialmente, para absorver melhor suas dicas e consegui implementar minha solução.

Brigadão cara!

Criado 20 de fevereiro de 2010
Ultima resposta 22 de fev. de 2010
Respostas 6
Participantes 2