[RESOLVIDO] Ajuda com logica

7 respostas
B

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.
*/

nessa parte que travei.
for (int i = 0; i < c.length; i++) {

			for (int j = 0; j < a.length - 1; j++) {

				if (a[j] < a[j + 1]) {
					if (a[j]< menorA) {
						menorA = a[j];
						
					}
					
				} else  {
					if ( a[j+1] < menorA) {
						menorA = a[j+1];
					}
				}

			}
...

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.

7 Respostas

criador

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

Sim. Mas estou tomando em consideração que os dois vetores A e B são do mesmo tamanho.

B

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
if(i != 0) {
  if(a[j] > c[i - 1])
     // continua
     if (a[j] < a[j + 1]) {  
          if (a[j]< menorA) {  
              menorA = a[j];  
                          
          }  
                      
      }

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

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. :smiley:

B

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.
 */

import javax.swing.*;

public class Exercicio01 {

	private static int menorB = [telefone removido];

	private static int menorA = [telefone removido];

	public static void main(String args[]) {

		int n = Integer.parseInt(JOptionPane
				.showInputDialog("Quantidade do vetor A"));
		int a[] = new int[n];
		for (int i = 0; i < a.length; i++) {
			a[i] = Integer.parseInt(JOptionPane
					.showInputDialog("Vetor A: Posição " + (i + 1)));
		}

		int o = Integer.parseInt(JOptionPane
				.showInputDialog("Quantidade do vetor B"));
		int b[] = new int[o];
		for (int i = 0; i < b.length; i++) {
			b[i] = Integer.parseInt(JOptionPane
					.showInputDialog("Vetor B: Posição " + (i + 1)));
		}

		int c[] = new int[n + o];

		String saida = "";
		for (int i = 0; i < c.length; i++) {

			if (a.length > 1) {
				for (int j = 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 (int j = 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ça

							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) {

					menorB = b[0];
				}
			}

			if (a.length > 1 && b.length > 1) {
				if (menorA < menorB) {

					c[i] = menorA;
					menorA = [telefone removido];
				} else {
					c[i] = menorB;
					menorB = [telefone removido];
				}
			} else if (a.length > 1) {
				if (i == 0) {
					if (menorA < menorB) {
						c[i] = menorA;
						menorA = [telefone removido];
					} else {
						c[i] = menorB;
						menorB = [telefone removido];
					}
				} else {
					if (menorA < menorB) {
						c[i] = menorA;
						menorA = [telefone removido];
					} else {
						c[i] = menorB;
						menorB = [telefone removido];

					}
				}

			} else if (b.length > 1) {
				if (i == 0) {
					if (menorA < menorB) {
						c[i] = menorA;
						menorA = [telefone removido];
					} else {
						c[i] = menorB;
						menorB = [telefone removido];
					}
				} else {
					if (menorA < menorB) {
						c[i] = menorA;
						menorA = [telefone removido];
					} else {
						c[i] = menorB;
						menorB = [telefone removido];
					}
				}

			} 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

Tente usar mais de um método p/ resolver o problema, Blackbeard, facilitaria em muito a lógica do teu programa.

Criado 9 de outubro de 2009
Ultima resposta 10 de out. de 2009
Respostas 7
Participantes 4