Problema - Crie um programa para ordenar um conjunto de strings
pelo seu tamanho. Seu programa deve receber um vetor contendo as strings e retornar este
mesmo vetor ordenado pelo tamanho das palavras. Se o tamanho das strings for igual, deve-se
manter a ordem original do conjunto.
Seguinte pessoal, não to conseguindo comparar as posições desse vetor, estou usando o mergeSort para ordenar o vetor, assim divido o vetor de string até o caso base e então comparo a string nessa posição do vetor, pra saber se aquele valor é maior ou menor.
o problema é que ja usei o equals, compareTo e não ta funcionando, alguém sabe como posso resolver ?
public class Exercicio16 {
public static void main(String[] args) {
String [] vet = {"pão", "açucar", "cachorro", "queijo","mão"};
}
public void mergeSort(String [] vetor, int inicio, int fim) {
int meio = (inicio + fim)/2;
mergeSort(vetor, inicio, meio);
mergeSort(vetor, meio+1, fim);
merge(vetor, inicio, meio, fim);
}
public void merge(String [] vetor, int inicio, int meio, int fim) {
String [] aux = null;
for(int i = 0; i< vetor.length; i++) {
aux[i] = vetor[i];
}
int i = inicio;
int j = meio + 1;
int k = inicio;
while( i <= meio && j <= fim) {
if(aux[i].compareToIgnoreCase(vetor[j])) {
}
…
…
…
}
}
}
equals deveria funcionar, vc pode postar o programa completo?
1 curtida
-------- O codigo completo --------------------
package Lista6;
public class Exercicio16 {
public static void main(String[] args) {
String [] vet = {"pão", "açucar", "cachorro", "queijo","mão"};
mergeSort(vet, 0, vet.length-1);
}
public static void mergeSort(String [] vetor, int inicio, int fim) {
int meio = (inicio + fim)/2;
mergeSort(vetor, inicio, meio);
mergeSort(vetor, meio+1, fim);
merge(vetor, inicio, meio, fim);
}
public static void merge(String [] vetor, int inicio, int meio, int fim) {
String [] aux = null;
for(int i = 0; i< vetor.length; i++) {
aux[i] = vetor[i];
}
int i = inicio;
int j = meio + 1;
int k = inicio;
while(i <= meio && j <= fim) {
if(aux[i].equals(aux[j])) {
vetor[k++] = aux[i++];
}
else
vetor[k++] = aux[j++];
}
while(i<=meio) {
vetor[j++] = aux[i++];
}
}
}
Cara, dei uma ajeitada no seu código. Quem alem de não estar organizando, também estava gerando Exceptions.
public static void main(String[] args) {
String[] vet = { "pão", "açucar", "cachorro", "queijo", "mão" };
mergeSort(vet, 0, vet.length - 1);
System.out.println(Arrays.toString(vet));
}
public static void mergeSort(String[] lista, int inicio, int fim) {
if (inicio < fim) {
int meio = (inicio + fim) / 2;
mergeSort(lista, inicio, meio);
mergeSort(lista, meio + 1, fim);
merge(lista, inicio, meio, fim);
}
}
public static void merge(String[] lista, int inicio, int meio, int fim) {
int i, j, k;
String[] listaAux = new String[lista.length];
for (i = inicio; i <= meio; i++) {
listaAux[i] = lista[i];
}
for (j = meio + 1; j <= fim; j++) {
listaAux[fim + (meio + 1) - j] = lista[j];
}
i = inicio;
j = fim;
for (k = inicio; k <= fim; k++) {
if (listaAux[i].compareTo(listaAux[j]) < 0) {
lista[k] = listaAux[i];
i = i + 1;
} else {
lista[k] = listaAux[j];
j = j - 1;
}
}
}
}
1 curtida
Desorganizado estava mesmo, desculpe.
os exceptions eu acho que deve ser por conta da IDE, pq o seu codigo tbm gerou algumas, mas foi fácil ajeitar e funcionou, obrigado mesmo!!
1 curtida
opa, eu disse “não estar organizando” querendo dizer ‘ordenando’ foi mal hahah. Que bom que deu certo, valeu!