[RESOLVIDO] [Dúvida] Intersecção de elementos de vector

5 respostas
N

Olá.

Eu estou a tentar fazer uma aplicação modular que leia-a 2 vectores com números inteiros. Depois de os ler eu queria que um dos módulos retorna-se o vector com os elementos que pertenciam aos elementos de intersecção dos dois vectores inseridos.
Mas os vectores podem ter tamanho diferentes e eu não sei como é que faço uma leitura dos dois e comparo o seu conteúdo para adicionar no novo vector no meu método intersecção.

Deixo aqui o meu código:

import javax.swing.JOptionPane;

public class PL6ex5 {

    public static void main(String[] args) {
        int N = Integer.parseInt(JOptionPane.showInputDialog("Quantos números deseja ler para o primeiro vector?"));
        int M = Integer.parseInt(JOptionPane.showInputDialog("Quantos números deseja ler para o primeiro vector?"));
        int[] v1 = new int[N];
        int[] v2 = new int[M];
        int S=0;
        int [] res = new int [S];
        JOptionPane.showMessageDialog(null, "Preenchimento do vector 1:");
        v1 = leitura(N);
        JOptionPane.showMessageDialog(null, "Preenchimento do vector 2:");
        v2 = leitura(M);
        res = interseccao(v1, v2, N);
        if(){//queria colocar a condiçao para caso o vector da intersecção não tivesse elementos mostrar esta mensage.
            //se tivesse elementos mostrava a outra.
            JOptionPane.showMessageDialog(null,"Não há intersecção entre os elementos dos dois vectores.");
        }else{
            JOptionPane.showMessageDialog(null, "Conjunto intersecção de nº entre os dois vectores: \n" + res);
        }
    }

    //leitura dos números
    public static int[] leitura(int N) {
        int[] v = new int[N];
        for (int i = 0; i < v.length; i++) {
            v[i] = Integer.parseInt(JOptionPane.showInputDialog("Insira um nº: "));
        }
        return v;
    }

    public static int [] interseccao(int[] v1, int[] v2, int N) {
        int cont =0;
        int [] inter = new int [cont];
        boolean flag1 = false;
        int j = N - 1;
        while (flag1 == false) {
            for (int i = 0; i < v1.length; i++) {
                if (v1[i] == v2[j]) {
                    cont++;//queria que o vector novo tivesse este tamanho
                    inter[i] = v2[j];
                }
            }
            if (j == 0) {
                flag1 = true;
            }
            j--;
        }
        return inter;
    }
}

Gostava que alguém me ajuda-se.
Um abraço

5 Respostas

D

sua pergunta ficou meio confusa, mas vou colocar aki o que eu entendi pra vc ver se é isso:
essa intersecção q vc qer é o seguinte, vc quer pegar os numeros que estão em AMBOS os vetores e colocar em um TERCEIRO vetor???
é isso???

se for isso, minha sugestão é a seguinte:
vc ja tem dois vetores preenchidos, ai voce instancia mais 1 vetor (esse é o que vai receber a interceção dos outros dois vetores)…
ai vc faz um FOR dentro de outro FOR, pq ele pega o primeiro valor do primeiro vetor, e sai comparando com todos os valores do segundo vetor, ai dentro desse segundo FOR, voce coloca uma condição, que se forem iguais os numeros voce colocar o valor dentro desse terceiro!!!

se a ideia for essa funciona direitinho.

por exemplo:

for(int i =0; i <vetor1.length ; i++){

for(int x = 0 ; vetor2.length ;x++){

if(vetor1[i] == vetor2[x]){

vetor3[i] = vetor1[i];

}

}

}

pronto, pelo que eu entendi do que vc quer, é mais ou menos isso…
vlw

N

OLá Damiao…

è isso sim, mas se como é que eu sei qual é que será a capacidade do terceiro vector criado? Porque eu não sei quanto elementos serão comuns nos 2 primeiros vectores. Tendo em conta isso, onde é que eu devo referir a capacidade desse novo vector?

Obrigado.
Abraço

D

vc declara o 3º vetor do mesmo tamanho do MENOR dos outros dois…

pq a intercecção sera maxima, a do tamanho do menor vetor.

entendeu??

por ex: eu tenho vetor 1 de tamanho 13, e o vetor 2 de tamanho 10.

qual será a maxima intersecção??? a do menor né (o do vetor 2)…

intao, vc declara com o valor do menor vetor…
vlw

N

era o que eu estava a pensar.

muito obrigado damiao.

abraço

D

OK…

se seu problema ja está resolvido, coloa a tag [RESOLVIDO] no titulo do tópico (são regras do tópico)…

vlw

Criado 13 de novembro de 2010
Ultima resposta 14 de nov. de 2010
Respostas 5
Participantes 2