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:
publicclassExercicio6Q9{//inicio do metodo construtorpublicstaticvoidmain(Stringargs[]){intvetA[]=newint[10];intvetB[]=newint[10];intvetC[]=newint[10];for(inti=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.
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.
publicclassExercicio6Q9{//inicio do metodo construtorpublicstaticvoidmain(Stringargs[]){intvetA[]=newint[10];intvetB[]=newint[10];intvetC[]=newint[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}
regis_hideki
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.
publicclassExercicio6Q9{//inicio do metodo construtorpublicstaticvoidmain(Stringargs[]){intvetA[]=newint[10];intvetB[]=newint[10];intvetC[]=newint[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}
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.
Enadrov
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];
}
}
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.
jairodione
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!!!
gpanassol
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
Pesquise em livros de algoritmos sobre o algoritmo de ordenação Mergesort. Abraços!
jairodione
Olá mi.rodrigues!
Irei fazer isto!!!
jairodione
Resolvi da seguinte forma!
packageestruturadedados;/** * * @author Jairo */importjavax.swing.JOptionPane;publicclassExercicio6Q9{//inicio do metodo construtorpublicstaticvoidmain(Stringargs[]){intvetA[]=newint[3];intvetB[]=newint[3];Stringnum,num1;//int aux, aux1 = 0;for(inti=0;i<3;i++){num=JOptionPane.showInputDialog("Digite um numero inteiro: ");vetA[i]=Integer.parseInt(num);}for(intj=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