Estou fazendo um exercicio e estou com muita dificuldade. Já é a segunda semana que estou tentando e não consigo achar a logica do negocio. Aqui vai:
* Faça um algoritmo em java para preencher dois vetores A e B
* com as posições de inteiro. Após, gere um vetor C com os va-
* lores de A e B, sendo que o vetor deve ficar ordenado. OBS:
* Não pode ordenar o vetor C, tem que jogar os valores nele ja
* ordenados.
*/
A segunda vez que ele passa pela segunda estrutura for, ele sempre vai pegar o menor numero. Eu queria uma ajuda para saber como ignorar na segunda instancia do for o menor numero.
Por exemplo:
O array a tem os valores 1, 2 e 3, respectivamente. nesse codigo eu só vou pegar o 1. queria saber como pegar o 2 na segunda vez que entra nesse for.
Desculpa a minha ignorancia, não sou fera em logica.Se alguem puder me ajudar eu fico muito grato.
Só uma pergunta: O vetor C terá que ter todos os inteiros de A e todos os inteiros de B ?
Ou seja, se A tem 5 posições e B 3 posições, C terá que ter 8 posições ?
Abraço!
B
Blackbeard
Sim. Mas estou tomando em consideração que os dois vetores A e B são do mesmo tamanho.
B
Blackbeard
o que não muda muita coisa, o que não estou sabendo fazer é eliminar o menor numero na segunda vez que repete a estrutura for e ir eliminando os menores ja pegos conforme repete este segundo for. Se alguem puder ajudar…
CrOnNoS
você poderia usar o último valor salvo em "c" que é o "último menor" para fazer outra comparação.
algo como
isso supondo que não tenha valores iguais, se tiver valores iguais você poderia por exemplo remover o valor do vetor, ou colocar um valor inválido caso não possa negativos por exemplo.
Em pior caso você poderia também criar um vetor como "salvosA" e "salvosB" contendo as posições que já foram lidas para "c" e checar se o novo "menor valor" não está em uma dessas casas.
B
Blackbeard
Putz cara, agora eu visualizei, brigadao.
eu ja tinha pensado nessas duas primeiras linhas, mas nao cheguei a associar as duas juntas. Obrigado pela luz.
if(a[j] > c[i - 1]) // essa aqui eu achava que ia dar problema, mas como a linha anterior é diferente de zero nao da bug.
vlw, obrigado.
B
Blackbeard
Resolvi o problema. Vou postar aqui caso tenha alguem que tambem esta tentando fazer ou queira aproveitar a logica para alguma coisa.
/* Faça um algoritmo em java para preencher dois vetores A e B * com as posições de inteiro. Após, gere um vetor C com os va- * lores de A e B, sendo que o vetor deve ficar ordenado. OBS: * Não pode ordenar o vetor C, tem que jogar os valores nele ja * ordenados. */importjavax.swing.*;publicclassExercicio01{privatestaticintmenorB=[telefoneremovido];privatestaticintmenorA=[telefoneremovido];publicstaticvoidmain(Stringargs[]){intn=Integer.parseInt(JOptionPane.showInputDialog("Quantidade do vetor A"));inta[]=newint[n];for(inti=0;i<a.length;i++){a[i]=Integer.parseInt(JOptionPane.showInputDialog("Vetor A: Posição "+(i+1)));}into=Integer.parseInt(JOptionPane.showInputDialog("Quantidade do vetor B"));intb[]=newint[o];for(inti=0;i<b.length;i++){b[i]=Integer.parseInt(JOptionPane.showInputDialog("Vetor B: Posição "+(i+1)));}intc[]=newint[n+o];Stringsaida="";for(inti=0;i<c.length;i++){if(a.length>1){for(intj=0;j<a.length;j++){if(j!=a.length-1){if(i!=0){if(a[j]>c[i-1]){if(a[j]<a[j+1]){if(a[j]<menorA){menorA=a[j];}}else{if(a[j+1]<menorA&&a[j+1]>c[i-1]){menorA=a[j+1];}else{if(a[j]<menorA)menorA=a[j];}}}}else{if(a[j]<a[j+1]){if(a[j]<menorA){menorA=a[j];}}else{if(a[j]<menorA){menorA=a[j];}}}}else{if(i!=0){if(a[j]>c[i-1]){if(a[j]<a[j-1]){if(a[j]<menorA){menorA=a[j];}}else{if(a[j-1]<menorA&&a[j-1]>c[i-1]){menorA=a[j-1];}else{if(a[j]<menorA){menorA=a[j];}}}}}else{if(a[j]>a[j-1]){if(a[j]<menorA){menorA=a[j];}}else{if(a[j]<menorA){menorA=a[j];}}}}}}else{if(i==0){menorA=a[0];}}if(b.length>1){for(intj=0;j<b.length;j++){if(j!=b.length-1){if(i!=0){if(b[j]>c[i-1]){if(b[j]<b[j+1]){if(b[j]<menorB){menorB=b[j];}}else{if(b[j+1]<menorB&&b[j+1]>c[i-1]){menorB=b[j+1];}else{if(b[j]<menorB)menorB=b[j];}}}}else{if(b[j]<b[j+1]){if(b[j]<menorB){menorB=b[j];}}else{if(b[j+1]<menorB){menorB=b[j+1];}}}}else{if(i!=0){if(b[j]>c[i-1]){if(b[j]>b[j-1]){if(b[j]<menorB){menorB=b[j];}}else{if(b[j-1]<menorB){menorB=b[j-1];}}}}else{// começaif(b[j]>b[j-1]){if(b[j]<menorB){menorB=b[j];}}else{if(b[j-1]<menorB){menorB=b[j-1];}}}}}}else{if(i==0){menorB=b[0];}}if(a.length>1&&b.length>1){if(menorA<menorB){c[i]=menorA;menorA=[telefoneremovido];}else{c[i]=menorB;menorB=[telefoneremovido];}}elseif(a.length>1){if(i==0){if(menorA<menorB){c[i]=menorA;menorA=[telefoneremovido];}else{c[i]=menorB;menorB=[telefoneremovido];}}else{if(menorA<menorB){c[i]=menorA;menorA=[telefoneremovido];}else{c[i]=menorB;menorB=[telefoneremovido];}}}elseif(b.length>1){if(i==0){if(menorA<menorB){c[i]=menorA;menorA=[telefoneremovido];}else{c[i]=menorB;menorB=[telefoneremovido];}}else{if(menorA<menorB){c[i]=menorA;menorA=[telefoneremovido];}else{c[i]=menorB;menorB=[telefoneremovido];}}}else{if(i==0){if(menorA<menorB){c[i]=menorA;c[i+1]=menorB;}else{c[i]=menorB;c[i+1]=menorA;}}}saida+=c[i]+" ";}JOptionPane.showMessageDialog(null,saida);}}
Vlw pela ajuda novamente.
B
Bruno_Laturner
Tente usar mais de um método p/ resolver o problema, Blackbeard, facilitaria em muito a lógica do teu programa.