Pessoal estou querendo desenvolver uma aplicação onde receba N nomes e os armazene em dois vetores de mesmo tamanho x. Depois ordenalos em um novo vetor com o dobro da capacidade(2x) de forma ordenada. Partindo do pre-suposto que os n nomes do 1º vetor esta ordenado(a-z) e o 2º tambem(a-z) e juntando os dois permaneçam ordenados.
Detalhe queria fazer isso sem métodos de ordenação e nenhuma facilidade do java. bubbleSort QickSort essas coisas não podem!
Peço a ajuda de vocês sou iniciante em java e meu professor passaou esse problema para resolver.
segue abaixo meu codigo até o momento mais enganchei justo na parte de ordenar
import java.util.*;
public class OrdenarString {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
int n = 0;
System.out.println("Digite o tamanho dos vetores");
n = ler.nextInt();
int m = (n*2);
String[] vetor1 = new String[n];
String[] vetor2 = new String[n];
String[] vetor3 = new String[m];
int b = 0;
//ENTRANDO COM O PRIMEIRO VETOR DE STRING
for(int i=0;i<vetor1.length;i++){
System.out.println("Digite uma palavra de tamanho");
vetor1[i]=ler.next();
}
//ENTRANDO COM O SEGUNDO VETOR DE STRING
for(int i=0;i<vetor2.length;i++){
System.out.println("Digite uma palavra de tamanho");
vetor2[i]=ler.next();
}
//PREENCHENDO E ORDENANDO VETOR3 DE STRING
for(int i=0;i<vetor3.length;i++){
for(int a = 0;a<vetor1.length - 1; a++){
int comparacao1 = vetor1[a].compareToIgnoreCase(vetor1[a+1]);
if(comparacao1 < 0){
vetor3[i] = vetor1[a];
}
else if(comparacao1 > 0){
vetor3[i]= vetor1[a+1];
}
else {
vetor3[i]=vetor1[a];
}
}
}
//IMPRIMINDO VETOR 3 NA TELA JA ORDENADO
for(int i=0;i<vetor3.length-2;i++){
System.out.println("[ "+vetor3[i]+" ]");
}
//--------------------------------------
}
}
Esta incompleto mais dai não sei passar
Dicas são muito bem vindas…
Antecipadamente agradeço pelo a atenção de todos!!!
Se ambos os vetores estão ordenados, não é preciso (e você não deve) usar bubblesort, quicksort ou “bobosort” como você está tentando fazer. Você precisa fazer uma outra coisa bem mais simples.
A dica é: digamos que você tem duas coleções de jornais, A ou B, ambas ordenadas por número. Você precisa criar uma terceira coleção, que é a combinação dessas duas. Como é que você faz?
a) Crie uma terceira coleção C, vazia
b) Olhe para as duas coleções de jornais. Veja qual delas é que tem o número do jornal menor. Você então escolhe esse jornal, tira dessa coleção (A ou B), e então põe na coleção C.
c) Repita isso até que acabem as duas coleções.
Opa amigão!
Arrays.sort(array) tambem não pode estou abstraindo a dica de meu amigo acima!
Logo logo posto se consigui ou não!!
de qualquer forma fico no aguardo por mais dicas
Obrigado amigos!
//PREENCHENDO E ORDENANDO VETOR 3
int a = 0;
for(int i=0;i<vetor3.length - 1;i++){
int aux = vetor1[a].compareToIgnoreCase(vetor2[a]);
if (aux < 0){
vetor3[i]=vetor1[a];
vetor3[i+1]=vetor2[a];
a++;
}
else if (aux>0){
vetor3[i]=vetor2[a];
vetor3[i+1]=vetor1[a];
a++;
}
else {
vetor3[i] = vetor1[a];
vetor3[i+1] = vetor1[a];
a++;
}
}
Pessoal sabem me dizer onde estou errando ??
Me parece que a variavel a ta estourando o vetor1 ou 2
Não sei fazer ela não passar do tamanho desses vetores
esse é o erro
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at Parte2.OrdenarString.main(OrdenarString.java:5)
Amigo, você ainda não parou para pensar. Você precisa de três variáveis:
Uma para indicar a posição atual no vetor 1;
Uma para indicar a posição atual no vetor 2;
E mais uma para indicar a posição atual no vetor 3 (destino).
Você só incrementa uma variável para tirar do vetor 1 ou 2, ou para acrescentar no vetor 3. Você está usando apenas uma variável (a).
OK?
Complementando apenas, o erro que ocorreu com você: java.lang.ArrayIndexOutOfBoundsException: 3
É devido ao fato de estar “estourando” o limite do seu vetor, provavelmente ele está sendo criado com 3 posições mas tenta acessar um 4ª posição. Apenas lembrando aquele pessoal esquecido, Arrays (vetores) começam sempre na posição 0.