Uniao de Array em ordem crescente[Resolvido]

Olá Pessoal!

Não estou conseguindo fazer um algorítimo que leia um vetor A de inteiros com 10 elementos, e leia outro vetor B de inteiros com 10 elementos, em seguida é para montar um vetor C com a União dos elementos do Vetor A com Vetor B em ordem crescente.
Abaixo segue o que tentei fazer:

public class Exercicio6Q9 {
    //inicio do metodo construtor
    public static void main(String args[]){
        int vetA[] = new int[10];
        int vetB[] = new int[10];
        int vetC[] = new int[10];
        for(int i = 0; i <= vetA.length;i++){
            vetA[i] = i;
            vetB[i] = i;
            if(vetA[i] == vetB[i]){
             vetC[i] = vetA[i];   
            }
            System.out.println("VetorA[]= "+vetA[i] +", VetorB[]= "+vetB[i]+", União do VetorA[i] com VetorB[i] -> VetorC[]= "+vetC[i]);
        }
        
    }//fim do metodo construtor
}

Você está misturando tudo… crie os dois vetores primeiro e só depois se preocupe em fundí-los no terceiro.

Quanto ao problema em si, se os dois vetores de entrada não estiverem ordenados, só juntar os dois vetores no terceiro e ordená-lo posteriormente; se estiverem ordenados, usar o algoritmo de fusão de vetores será mais eficiente.

Olá Regis!

Consegui resolver o problema “Parcialmente”, pois da forma como esta descrito no codigo abaixo ficou grande “muitas linhas de codigo”. Gostaria de fazer a mesma coisa só que menos linhas de codigo.

public class Exercicio6Q9 {
    //inicio do metodo construtor
    public static void main(String args[]){
        int vetA[] = new int[10];
        int vetB[] = new int[10];
        int vetC[] = new int[20];
        
        vetA[0] = 1;
        vetA[1] = 2;
        vetA[2] = 3;
        vetA[3] = 4;
        vetA[4] = 5;
        vetA[5] = 6;
        vetA[6] = 7;
        vetA[7] = 8;
        vetA[8] = 9;
        vetA[9] = 10;
        vetB[0] = 11;
        vetB[1] = 12;
        vetB[2] = 13;
        vetB[3] = 14;
        vetB[4] = 15;
        vetB[5] = 16;
        vetB[6] = 17;
        vetB[7] = 18;
        vetB[8] = 19;
        vetB[9] = 20;
        if(vetA[0] != vetB[0]){
            vetC[0] = vetA[0];
            vetC[1] = vetB[0];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[0]+" e "+vetC[1]);
        }
        if(vetA[1] != vetB[1]){
            vetC[2] = vetA[1];
            vetC[3] = vetB[1];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[2]+" e "+vetC[3]);
        }
        if(vetA[2] != vetB[2]){
            vetC[4] = vetA[2];
            vetC[5] = vetB[2];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[4]+" e "+vetC[5]);
        }
        if(vetA[3] != vetB[3]){
            vetC[6] = vetA[3];
            vetC[7] = vetB[3];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[6]+" e "+vetC[7]);
        }
        if(vetA[4] != vetB[4]){
            vetC[8] = vetA[4];
            vetC[9] = vetB[4];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[8]+" e "+vetC[9]);
        }
        if(vetA[5] != vetB[5]){
            vetC[10] = vetA[5];
            vetC[11] = vetB[5];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[10]+" e "+vetC[11]);
        }
        if(vetA[6] != vetB[6]){
            vetC[12] = vetA[6];
            vetC[13] = vetB[6];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[12]+" e "+vetC[13]);
        }
        if(vetA[7] != vetB[7]){
            vetC[14] = vetA[7];
            vetC[15] = vetB[7];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[14]+" e "+vetC[15]);
        }
        if(vetA[8] != vetB[8]){
            vetC[16] = vetA[8];
            vetC[17] = vetB[8];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[16]+" e "+vetC[17]);
        }
        if(vetA[9] != vetB[9]){
            vetC[18] = vetA[9];
            vetC[19] = vetB[9];
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[18]+" e "+vetC[19]);
        }
    }//fim do metodo construtor
}

[quote=jairodione]Olá Regis!

Consegui resolver o problema “Parcialmente”, pois da forma como esta descrito no codigo abaixo ficou grande “muitas linhas de codigo”. Gostaria de fazer a mesma coisa só que menos linhas de codigo.

[code]
public class Exercicio6Q9 {
//inicio do metodo construtor
public static void main(String args[]){
int vetA[] = new int[10];
int vetB[] = new int[10];
int vetC[] = new int[20];

    vetA[0] = 1;
    vetA[1] = 2;
    vetA[2] = 3;
    vetA[3] = 4;
    vetA[4] = 5;
    vetA[5] = 6;
    vetA[6] = 7;
    vetA[7] = 8;
    vetA[8] = 9;
    vetA[9] = 10;
    vetB[0] = 11;
    vetB[1] = 12;
    vetB[2] = 13;
    vetB[3] = 14;
    vetB[4] = 15;
    vetB[5] = 16;
    vetB[6] = 17;
    vetB[7] = 18;
    vetB[8] = 19;
    vetB[9] = 20;
    if(vetA[0] != vetB[0]){
        vetC[0] = vetA[0];
        vetC[1] = vetB[0];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[0]+" e "+vetC[1]);
    }
    if(vetA[1] != vetB[1]){
        vetC[2] = vetA[1];
        vetC[3] = vetB[1];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[2]+" e "+vetC[3]);
    }
    if(vetA[2] != vetB[2]){
        vetC[4] = vetA[2];
        vetC[5] = vetB[2];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[4]+" e "+vetC[5]);
    }
    if(vetA[3] != vetB[3]){
        vetC[6] = vetA[3];
        vetC[7] = vetB[3];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[6]+" e "+vetC[7]);
    }
    if(vetA[4] != vetB[4]){
        vetC[8] = vetA[4];
        vetC[9] = vetB[4];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[8]+" e "+vetC[9]);
    }
    if(vetA[5] != vetB[5]){
        vetC[10] = vetA[5];
        vetC[11] = vetB[5];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[10]+" e "+vetC[11]);
    }
    if(vetA[6] != vetB[6]){
        vetC[12] = vetA[6];
        vetC[13] = vetB[6];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[12]+" e "+vetC[13]);
    }
    if(vetA[7] != vetB[7]){
        vetC[14] = vetA[7];
        vetC[15] = vetB[7];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[14]+" e "+vetC[15]);
    }
    if(vetA[8] != vetB[8]){
        vetC[16] = vetA[8];
        vetC[17] = vetB[8];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[16]+" e "+vetC[17]);
    }
    if(vetA[9] != vetB[9]){
        vetC[18] = vetA[9];
        vetC[19] = vetB[9];
        System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[18]+" e "+vetC[19]);
    }
}//fim do metodo construtor

}
[/code][/quote]

Quanto à redução de código:
-a inicialização de vetores pode ser feita dessa forma: int vetA[] = {1,2,3,4,5,6,7,8,9,10}.
-os vários ifs podem ser substituídos por um laço com um if apenas dentro dele.

Mesmo com esses ajustes, o código não funcionará direito. Qual o motivo de usar o operador “!=”? Se você precisa ordenar, você precisa de comparadores “<” ou “>”.
E você ainda não respondeu se os dois vetores menores chegam ordenados ou não.

Cara para fundir os vetores vc poderia fazer assim.

for(int i = 0; i < vetorC.length; i++){ if(i < vetorA.length){ vetorC[i] = vetorA[i]; }else{ vetorC[i] = vetorB[i]; } }

Para colocar em Ordem crescente:

[code]
int aux = 0;

for(int x = 0; x < vetorC.length; x++){
for(int y = x+1; y < vetotC.length -1; y++){
if(vetorC[x] > vetorC[y]){
aux = vetorC[x];
vetorC[x] = vetorC[y];
vetor[y] = aux;
}
}
}[/code]

Pela sua implementação você não quer valores repetidos no vetC[], mas iniciou os dois vetores: vetA [] e vet[] B com valores seqüenciais(diferentes), ou seja fica visível no seu código que não há valores iguais nos dois primeiros vetores então este monte de IF´s de verificação é sem utilidade!

Se você está iniciando com valores seqüenciais irá ordenar o quê? ou está ordenando o quê?
Como o vetC [] tem vinte posições caso houvesse valores repetidos não seria totalmente preenchido.

Você poderia gerar números aleatórios para preencher os dois primeiros vetores, fazia a verificação de números repetidos, preenchia o terceiro vetor e depois o ordenava.

Olá Alexsandro Lopes!

estes IF’s serão necessários caso eu peça para o usuário digitar os componentes dos vetores, portanto eu fiz estes IF’s para saber se relamente vai dar certo, pois na união de dois conjuntos não posso mostrar o item repetido no vetorA e no vetorB, devo mostra-lo somente uma vez;
Ex.:

vetA[0] = 0;
vetB[0] = 0;
if(vetA[0] != vetB[0]){  
            vetC[0] = vetA[0];  
            vetC[1] = vetB[0];  
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[0]+" e "+vetC[1]);  
        }else{
            System.out.println("A Uniao do Vetor A e Vetor B -> "+vetC[0]);
}

OBS.: O TESTE ACIMA SERIA NECESSARIO CASO O USUARIO FOSSE INSERIR OS ELEMENTOS DOS VETORES!

Olá Enadrov e Regis!

Seria isto que estou buscando redução de linhas de codigo. Irei fazer isso que vocês me indicaram, depois mostro como ficou, pois não irei fazer isto hoje, ficara para o próximo final de semana.

Muito Obrigado!!!

Olá Jairo,

Acredito que o mais facil seria vc usar a classe Collection.short para ordenacao, dai fica mole né?!

1 - cria a lista 1
2 - cria a lista 2
3 - junta as duas
4 - ordena tudo

Espero ter ajudado…

Abs

Veja: http://www.guj.com.br/java/20989-ordenando-list
JavaDoc: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html

Existem muitos algoritmos de ordenação, tente ser mais específico e para uma auxilio o livro “Algoritmos Teoria e Prática, Tomas H. Cormen …” é ótimo

Caso os dois vetores iniciais já estiverem ordenados pode fazer o seguinte:

		int []primeiro = {2, 3, 6, 9, 10};
		int []segundo = {1, 4, 5, 7, 8};
		int []terceiro = new int[primeiro.length + segundo.length];
		
		int indicePrimeiro = 0, incideSegudo = 0, incideTerceiro = 0;
		
		//enquanto os dois vetores tiverem elementos para percorrer
		while (indicePrimeiro < primeiro.length && incideSegudo < segundo.length) {
			if (primeiro[indicePrimeiro] < segundo[incideSegudo]) {
				terceiro[incideTerceiro++] = primeiro[indicePrimeiro++];
			} else if (primeiro[indicePrimeiro] > segundo[incideSegudo]) {
				terceiro[incideTerceiro++] = segundo[incideSegudo++];
			} else {
				terceiro[incideTerceiro++] = primeiro[indicePrimeiro++];
				++incideSegudo; //elimina a duplicacao de elementos
			}
		}
		//passa os elementos que restaram a percorrer para o terceiro vetor
		while (indicePrimeiro < segundo.length)
			terceiro[incideTerceiro++] = primeiro[indicePrimeiro++];
		while (incideSegudo < segundo.length)
			terceiro[incideTerceiro++] = segundo[incideSegudo++];

Olá DavidUser!

Neste Final de semana irei utilizar este seu algoritmo, OBG!

Olá Pessoal!

fiz da maneira que está descrito abaixo:

public static void main(String args[]){
        int vetA[] = new int[10];
        int vetB[] = new int[10];
        String vetC[] = new String[3];
        
        for(int i = 0; i < 10; i++){
            for(int j = i + 1; j < 10; j++){
                vetA[i] = i;
                vetB[j] = j;
                if(vetA[i] != vetB[j]){
                    vetC[1] = vetA[i]+" "+vetB[j];
                    System.out.println("A União dos vetores é-> "+vetC[1]);
                }
            }
        }

MAS NÃO INFORMA O RESULTADO ESPERADO, ALEM DE UTILIZAR UMA MATRIZ. GOSTARIA DE FAZER ISTO SOMENTE COM VETOR “SEM UTILIZAR MATRIZ”, TERIA COMO FAZER?

Acredito que exista um passo-a-passo mais simples:
*Colocar valores do array A no array C;
*Colocar valores do array B no array C;
*Aplica um mergesort no array C;

Pesquise em livros de algoritmos sobre o algoritmo de ordenação Mergesort. Abraços!

Acredito que exista um passo-a-passo mais simples:
*Colocar valores do array A no array C;
*Colocar valores do array B no array C;
*Aplica um mergesort no array C;

Pesquise em livros de algoritmos sobre o algoritmo de ordenação Mergesort. Abraços!

Olá mi.rodrigues!

Irei fazer isto!!!

Resolvi da seguinte forma!

package estruturadedados;
/**
 *
 * @author Jairo
 */
import javax.swing.JOptionPane;

public class Exercicio6Q9 {
    //inicio do metodo construtor
    public static void main(String args[]){
        int vetA[] = new int[3];
        int vetB[] = new int[3];
        String num, num1;
        //int aux, aux1 = 0;
        for(int i = 0; i < 3; i++){
            num = JOptionPane.showInputDialog("Digite um numero inteiro: ");
            vetA[i] = Integer.parseInt(num);
        }
        for(int j = 0; j < 3; j++){
        num1 = JOptionPane.showInputDialog("Digite um numero inteiro: ");
        vetB[j] = Integer.parseInt(num1);
        }
        JOptionPane.showMessageDialog(null, "Valores digitados para o vetA foram: "+vetA[0]+", "+vetA[1]+", "+vetA[2]);
        JOptionPane.showMessageDialog(null, "Valores digitados para o vetB foram: "+vetB[0]+", "+vetB[1]+", "+vetB[2]);
        if(vetA[0] > vetA[1] && vetA[1] > vetA[2] && vetB[0] > vetB[1] && vetB[1] > vetB[2] && vetA[0] != vetB[0] && vetA[1] != vetB[1] && vetA[2] != vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[2]+";"+vetB[2]+", "+vetA[1]+";"+vetB[1]+", "+vetA[0]+";"+vetB[0]);
        }if(vetA[0] > vetA[1] && vetA[1] < vetA[2] && vetB[0] > vetB[1] && vetB[1] < vetB[2] && vetA[0] != vetB[0] && vetA[1] != vetB[1] && vetA[2] != vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[1]+";"+vetB[1]+", "+vetA[2]+";"+vetB[2]+", "+vetA[0]+";"+vetB[0]);
        }if(vetA[0] < vetA[1] && vetA[1] > vetA[2] && vetB[0] < vetB[1] && vetB[1] > vetB[2] && vetA[0] != vetB[0] && vetA[1] != vetB[1] && vetA[2] != vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[0]+";"+vetB[0]+", "+vetA[2]+";"+vetB[2]+", "+vetA[1]+";"+vetB[1]);
        }if(vetA[0] < vetA[1] && vetA[1] < vetA[2] && vetB[0] < vetB[1] && vetB[1] < vetB[2] && vetA[0] != vetB[0] && vetA[1] != vetB[1] && vetA[2] != vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[0]+";"+vetB[0]+", "+vetA[1]+";"+vetB[1]+", "+vetA[2]+";"+vetB[2]);
        }if(vetA[0] > vetA[1] && vetA[1] > vetA[2] && vetB[0] > vetB[1] && vetB[1] > vetB[2] && vetA[2] == vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[2]+", "+vetA[1]+";"+vetB[1]+", "+vetA[0]+";"+vetB[0]);
        }if(vetA[0] > vetA[1] && vetA[1] < vetA[2] && vetB[0] > vetB[1] && vetB[1] < vetB[2] && vetA[1] == vetB[1]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[1]+", "+vetA[2]+";"+vetB[2]+", "+vetA[0]+";"+vetB[0]);
        }if(vetA[0] < vetA[1] && vetA[1] > vetA[2] && vetB[0] < vetB[1] && vetB[1] > vetB[2] && vetA[0] == vetB[0]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[0]+", "+vetA[2]+";"+vetB[2]+", "+vetA[1]+";"+vetB[1]);
        }if(vetA[0] < vetA[1] && vetA[1] < vetA[2] && vetB[0] < vetB[1] && vetB[1] < vetB[2] && vetA[0] == vetB[0]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[0]+", "+vetA[1]+";"+vetB[1]+", "+vetA[2]+";"+vetB[2]);
        }if(vetA[0] == vetA[1] && vetA[1] == vetA[2] && vetB[0] == vetB[1] && vetB[1] == vetB[2] && vetA[0] == vetB[0] && vetA[1] == vetB[1] && vetA[2] == vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[0]);
        }if(vetA[0] == vetA[1] && vetA[1] < vetA[2] && vetB[0] == vetB[1] && vetB[1] < vetB[2] && vetA[0] == vetB[0] && vetA[1] == vetB[1] && vetA[2] != vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[0]+", "+vetA[2]+";"+vetB[2]);
        }if(vetA[0] > vetA[1] && vetA[1] == vetA[2] && vetB[0] > vetB[1] && vetB[1] == vetB[2]){
            JOptionPane.showMessageDialog(null, "A uniao dos vetores A e B: "+vetA[1]+", "+vetA[0]+";"+vetB[0]);
        }
    }//fim do metodo construtor
}//fim da classe