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.
[code]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];
}
}
}
…
[/code]
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!
Sim. Mas estou tomando em consideração que os dois vetores A e B são do mesmo tamanho.
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
Outubro 9, 2009, 12:20pm
#5
você poderia usar o último valor salvo em “c” que é o “último menor” para fazer outra comparação.
algo como
[code]if(i != 0) {
if(a[j] > c[i - 1])
// continua
if (a[j] < a[j + 1]) {
if (a[j]< menorA) {
menorA = a[j];
}
}[/code]
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.
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.
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 = 2147483647;
private static int menorA = 2147483647;
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 = 2147483647;
} else {
c[i] = menorB;
menorB = 2147483647;
}
} else if (a.length > 1) {
if (i == 0) {
if (menorA < menorB) {
c[i] = menorA;
menorA = 2147483647;
} else {
c[i] = menorB;
menorB = 2147483647;
}
} else {
if (menorA < menorB) {
c[i] = menorA;
menorA = 2147483647;
} else {
c[i] = menorB;
menorB = 2147483647;
}
}
} else if (b.length > 1) {
if (i == 0) {
if (menorA < menorB) {
c[i] = menorA;
menorA = 2147483647;
} else {
c[i] = menorB;
menorB = 2147483647;
}
} else {
if (menorA < menorB) {
c[i] = menorA;
menorA = 2147483647;
} else {
c[i] = menorB;
menorB = 2147483647;
}
}
} 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.
Tente usar mais de um método p/ resolver o problema, Blackbeard, facilitaria em muito a lógica do teu programa.