Compar Strings dentro de um vetor de String

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!