1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

JAVA- Arrays retirar iguais

Discussão em 'Programação' iniciada por limalhao, 6 de Janeiro de 2008. (Respostas: 7; Visualizações: 7681)

  1. Boas será que alguém me pode ajudar

    Estava a fazer um exercicio com arrays mas não consigo acabar o objectivo é ter dois arrays e fazer a intersecção mas retirar todos os iguais e ésta parte que não consigo alguém pode dar um help

    Aqui vai o código que já fiz
    public static int intersection(int[] v1, int[] v2) {

    for( int i=0; i<v1.length; ++i ){
    for( int j=0; j<v2.length; ++j ){
    if( v2[j]==v1 );

    {System.out.println("int v3={" +v1+ "," +j );
    break;

    Como retiro os valores que forem iguais?
     
  2. CoolMaster

    CoolMaster Power Member

    Tens que pensar um bocado:P

    Crias um array em branco e adicionas os valores que forem iguais a esse array, e pronto.. agora nesse novo array tens os valores iguals:007:
     
  3. Penso que se calhar não me expliquei correctamente o que eu quero é no caso de ter por exemplo num array v1 ={1,2,3,4} e v2={1,1,2,3,5,6} quando faço a intersecção e crio o novo array vai aparecer v3{1,1,2,3} devido aos dois 1 do segundo array e era este segundo 1 que eu queria eliminar
     
  4. CoolMaster

    CoolMaster Power Member

    AAAAAAAAAAH... uma forma facil é em vez de usares um array usares collections do tipo Set. Este container não deixa duplicar os valores ao contrário de um array normal ou de uma List (que tambem é um container).

    Outra forma mais lenta é na altura de fazeres a intersecção veres se ele já existe no array final.
     
  5. Dragon_Tamer

    Dragon_Tamer Power Member

    public static int intersection(int[] v1, int[] v2) {
    int tamanho;

    // porque o array final nao tera mais elementos que o menor array em comparacao
    if(v1.length > v2.length)
    tamanho = v2.length;
    else
    tamanho = v1.length;

    int []finalarray = new int[tamanho];
    int final_pos = 0;

    for( int i=0; i<v1.length; ++i ){
    for( int j=0; j<v2.length; ++j ){
    if( v2[j]==v1 ) {

    // vai percorrer o array final ( com os valores repetidos) ate chegar a posição de escrita actual, ou até encontrar um valor ja existente
    for(int k=0; k<finalpos && finalarray[k]!=v1;k++);

    // guarda o valor se ainda não existir, ou então faz break e passa a proxima comparacao
    if(k==final_pos)
    finalarray[final_pos++]=v1;
    else
    break;
    }
    }
    }



    P.S.: Eu ja ha algum tempo que nao mexo em java por isso e possivel que haja alguma maneira para simplificar este codigo, mas em principio isto deverá dar :)
    Espero ter ajudado

    P.S.S.: Os valores de um array de inteiros em java sao inicializados a 0, tanto quanto sei, por isso se existirem 0's nos arrays que estás a comparar, não te esqueças de contar so um e ignorar o resto
     
  6. AliFromCairo

    AliFromCairo Power Member

    Boas,

    Podes usar o método Arrays.binarySearch(int v[], int key) para verificar se um dado elemento está contido num array. Alternativamente, podes fazer um método bastante mais eficiente para a intersecção se ordenares os dois vectores primeiro (podes usar o método Arrays.sort(int v[]) para ordenar), sendo que a filtragem também seria fácil de fazer desta maneira.
     
  7. Boas,
    antes de mais obrigado pela vossa ajuda no entento continuo com duvidas mas agora no codigo postado pelo Dragon_Tamer

    for(int k=0; k<finalpos && finalarray[k]!=v1;k++);
    :rolleyes:Aqui crio o novo array certo para que serve o e lógico?

    // guarda o valor se ainda não existir, ou então faz break e passa a proxima comparacao
    if(k==final_pos)
    finalarray[final_pos++]=v1;
    else
    break;
    Se fizer aqui um print de finalarray[final_pos++] o que devia verificar era a intersecção dos arrays sem numeros repetidos?

    Obrigado
     
  8. Dragon_Tamer

    Dragon_Tamer Power Member




    O que vais verificar e um array com a interesecção dos elementos repetidos nos 2 arrays iniciais, com o pormenor que mencionei:

    P.S.S.: Os valores de um array de inteiros em java sao inicializados a 0, tanto quanto sei, por isso se existirem 0's nos arrays que estás a comparar, não te esqueças de contar so um e ignorar o resto


    Para resolveres isso, caso os valores dos arrays a comparar sao positivos ou estão dentro de um limite definido, basta inicializares o array a um valor que não exista lá, por exemplo -1 caso não existam números negativos nos arrays a comparar. Ou então em vez de um array, usas um vector de inteiros, ficando apenas os elementos que necessitas para isso.
     

Partilhar esta Página