• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

limalhao

ARRAYS UNIÂO JAVA

6 mensagens neste tópico

Alguém me pode dar uma mãozinha por favor queria fazer uma união de dois arrays e ficar com um com os valores que sejam diferentes entre eles ou seja

                              public static void main(String [] args){

             

                                          int[] v1 = {1, 2, 3};

                            int[] v2 = {3, 4, 3,6};

daqui queria tirar um array que ficasse int [] v3 ={1,2,3,4,6};

Tenho estado a fazer com for mas não consigo perceber como chego ao array que reuna os valores dos arrays iniciais alguém me pode ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Supondo que v1 e v2 existem e estão definidos em algum lado:

int[] final = new int[v1.length + v.lenght];

for(int i = 0; i < v1.length; i++) {
    final[i] = v1[i];
}

for(int i = 0, z = v1.lenght -1; i < final.length; i++, z++) {
    final[z] = v2[i];
}

Código feito na janela de resposta rápida sem qualquer teste, mas mesmo assim acho que está o que queres, se precisares de ordenar acho que é possível usar os métodos de ordenação das colecções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o knitter isso vai juntar os 2 arrays. Não é isso que ele pretende.

Ele pretende uma união dos elementos dos 2 arrays.

Não podes usar Collections limalhao?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens toda a razão, nem reparei que os arrays tinham elementos diferentes, realmente o que fiz junta um array depois do outro, nada mais.

Ok, agora acho que é o que queres:

    public static void main(String[] args) {
        int[] v1 = {1, 2, 3};
        int[] v2 = {3, 4, 3, 6};
        Vector<Integer> uniao = new Vector();

        //adicionar o primeiro vector eliminando repeticoes 
        for (int i = 0; i < v2.length; i++) {
            if (!uniao.contains(v2[i])) {
                uniao.add(v2[i]);
            }
        }

        //adicionar segundo vecto eliminando repeticoes
        for (int i = 0; i < v2.length; i++) {
            if (!uniao.contains(v2[i])) {
                uniao.add(v2[i]);
            }
        }
    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois não posso usar colections isto é sobre Java básico e eu ainda consigo ser mais básico do que o JAVA.

Aproveitando o primeiro exemplo fiz isto:

int[] pos_final = new int[v1.length+v2.length]; 

for(int i = 0; i < v1.length; i++) {
pos_final[i] = v1[i];
}
for(int j = 0, z=v2.length-1; j < pos_final.length; z++, j++) {   
pos_final[z] = v2[j];
System.out.print("" +pos_final[z]);
}

o pos_final devia ser o conjunto dos dois vectores iniciais certo?

Mas ñão é só me representa uma parte do segundo e depois dá erro

21684Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13

        at ArraysUtils_c.union(ArraysUtils_c.java:22)

        at ArraysUtils_c.main(ArraysUtils_c.java:32)

Porquê?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não estou a usar "collections", estou a usar um objecto simples de Java, o Vector, que representa um vector sem limite de tamanho e que vai crescendo automaticamente. O que pode confundir será o uso de genéricos, mas isso pode ser alterado para deixar de os usar.

Quanto ao erro é simples, "ArrayIndexOutOfBoundsException", ou como quem diz, "indice do array fora do tamanho definido", porquê, porque o ciclo for é controlado pelo tamanho do vector final, supondo que v1 tem 3 elementos e v2 tem outros 3, se reparares o 2º ciclo for executará 12 vezes, já que o tamanho de pos_final é 12. Durante as 3 primeiras execuções do 2º ciclo for não há problema porque o v2 tem 3 posições e a variável j está com o valor 2, o que é correcto, o problema é que o ciclo não terminou, e vai continuar a executar pelo menos mais 9 vezes, mas o vector v2 tem apenas 3 posições, assim que o valor de j passar o tamanho do vector vais ter essa excepção.

O segundo pedaço de código que coloquei faz uso de um método, o contains, para verificar se o elemento já existe no vector, se não poderes usar a classe Vector então a forma mais simples é implementares tu esse método. O método apenas percorre todo o vector e verifica se o elemento que estás a tentar introduzir já existe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora