Ajuda em algoritmo com vetores

5 respostas
E

Olá, sou novo por aqui (todo mundo nessa sessão é... :lol: ) e não estou conseguindo concluir um algoritmo, já procurei no google, em fóruns e não achei nada que pudesse me ajudar. É o seguinte:

Construa um programa que permita informar dados para 2 vetores inteiros de 10 posições e
apresente o conjunto união dos vetores. Lembrando que conjunto união são todos os elementos que
existem em ambos os vetores, mas sem repetição (cada número pode aparecer uma única vez no
resultado).

Já fiz quase tudo só estou me enrolando na parte da repetição. O conjunto sai perfeito mas com repetição.

Essa é a parte de comparar os elementos dos vetores e escrevê-los:

*Os vetores são "x" e "y",
"r" é o vetor resultado.

int l = 0;
    for(int i = 0; i<10; i++){
      for(int j = 0; j<10; j++){
        if(x[i]==y[j]){//se achar algum elemento igual entre os dois vetores
          for(int k = 0; k<10; k++){//compara com os elementos do conjunto união
            if(x[i]==r[k]){//se for um elemento repetido com algum do conjunto união
              repetido = true;}
            else{//se não for repetido com algum elemento do conjunto união
              repetido = false;}}
          
          if(repetido==false){//se não for repetido ele adiciona o elemento ao conjunto união e o imprime
            r[l] = x[i];
            System.out.print(r[l]+", ");
            l++;}}}}

Já revirei esse código e não consegui achar o erro. Pra mim era pra estar funcionando corretamente. Agradeço desde já qualquer ajuda.

5 Respostas

B
  1. Jogue tudo de X para R.
  2. Para cada elemento em Y, veja se ele existe em R.
    2.1 Se existir, use um continue e vá para o próximo elemento.
    2.2 Quando a iteração em R acabar você não vai ter achado um duplicado. Neste momento já insira o elemento de Y no final de R.
E

Consegui fazer até o passo 2.1 porque não entendi o 2.2. Mas tá aí o que consegui, qual o próximo passo?

//passo 1
    for(int i = 0; i<10; i++){
      r[i] = x[i];}
    
    //passo 2
    for(int i = 0; i<10; i++){
      for(int j = 0; j<10; j++){
        if(y[i]==r[j]){//passo 2.1
          continue;
        }
      }
B
//passo 1
    for(int i = 0; i<=indiceUltimoElementoX; i++){
      r[i] = x[i];
    }
    
    //passo 2
    for(int i = 0; i<=indiceUltimoElementoY; i++){
      for(int j = 0; j<=indiceUltimoElementoR; j++){
        if(y[i]==r[j]){//passo 2.1
          continue;
        }
      }
      // a iteração em R acabou.
      // y[i] não é um número duplicado
      // se r  tem 10 elementos, coloca o novo elemento na próxima casa.
      indiceUltimoElementoR++;
      r[indiceUltimoElementoR] = y[i];
    }
E

Agora entendi :D :roll: , ficou assim então:

* K é o índice do vetor R
for(int i=0; i<10; i++){//passo 1
      r[i]=x[i];
      k = i;}
    
    //passo 2
    for(int i=0; i<10; i++){
      for(int j=0; j<10; j++){
        if(y[i]==r[j]){}//passo 2.1 (preferi deixar vazio - mais simples pra mim)
        else{//passo 2.2
          k++;
          r[k] = y[i];}}}
Teoricamente era pra estar funcionando, ele compila e roda, mas quando eu acabo de entrar com os dois vetores me dá esse erro:
java.lang.ArrayIndexOutOfBoundsException: 20
Ou seja, o índice do vetor R está ultrapassando 20. Why God, why? :roll:
mausexdd

Por causa do seu k++;

Criado 24 de fevereiro de 2013
Ultima resposta 25 de fev. de 2013
Respostas 5
Participantes 3