Método bolha com String

7 respostas
F

Estou com dúvida com o método bolha para String, com int dá certo:

class ordena{

void bolha(int [] numeros){

int i, j, temp;

int fim = numeros.length;
for(i=fim -1; i > 0 ; i--) {
  
  System.out.println("Estado do vetor no inicio do passo i = " + i);
  imprimeArray(numeros);
  
  for(j=1; j <= i; j++) {
    if(numeros[j-1] > numeros[j]) {
      temp = numeros[j-1];
      numeros[j-1] = numeros[j];
      numeros[j] = temp;
    }
  }
  
  System.out.println("Estado do vetor no fim passo i = " + i);
  imprimeArray(numeros);
  System.out.println("-----------------------------------------");
}

}
}

Mas como posso substituir por String [] nomes???

7 Respostas

FilhoDoRei

Cara em primeiro lugar utiliza a tag code para facilitar o entendimento.

depois da uma olhada nesse codigo aqui:
public class BolhaNaString {
	
	public static void main(String args[]){
		String [] nomes = {"Orruda","Lulinha","Dilma Roussef"};		
		String aux = "";
		int valor1=0, valor2=0;
		int i,j;
		for(i=3;i>0;i--){
			for(j=1;j<3;j++){
				valor1 = nomes[j].charAt(0);
				valor2 = nomes[j-1].charAt(0);
				if(valor2 > valor1){
					aux = nomes[j-1];
					nomes[j-1] = nomes[j];
					nomes[j] = aux;
				}
			}
		}
		
		for(i=0;i<3;i++){
			System.out.println(nomes[i]);
		}
	}
}

Vê se resolve seu problema ai, se não resolver tenta dessa forma(recomendo):

import java.util.Arrays;

public class Ordenacao{
	public static void main(String ...args){
		String nomes[] = {"Orruda","Joao","Bastiao"};
		
		Arrays.sort(nomes);
		
		for(int i=0;i<3;i++){
			System.out.println(nomes[i] + "\n");
		}
	}
}

flwssssss

ViniGodoy

Esse tópico foi aberto a pouco tempo atrás… duas vezes…
dá uma olhada:
http://www.guj.com.br/posts/list/91903.java
http://www.guj.com.br/posts/list/91892.java

Por isso é bom usar a busca do fórum antes de perguntar. :wink:

Vocês são todos da mesma turma?
Talvez fosse uma boa conversar com os colegas também…

F

Então eu fiz algo parecido, mas tá dando erro de compilação nessa parte:

pos1 = listaDeClientes[i].charAt(0);
    pos2 = listaDeClientes[j].charAt(0);

O método todo é esse:

void ordenaLista() {

Cliente aux;

int pos1 = 0;

int pos2 = 0;

for (int i = 0; i < listaDeClientes.length; i++) {

for (int j = i + 1; j < listaDeClientes.length; j++) {

pos1 = listaDeClientes[i].charAt(0);

pos2 = listaDeClientes[j].charAt(0);

if (pos1 > pos2) {

aux = listaDeClientes[j];

listaDeClientes[j] = listaDeClientes[i];

listaDeClientes[i] = aux;

}

}

}

}

Obs: a listaDeClientes já está apresentada no meu programa

ViniGodoy

Como já foi pedido, use a tag code… ou ninguém vai ler o seu código por aqui. Se você não sabe fazer isso, leia esse tópico:
http://www.guj.com.br/posts/list/50115.java

ViniGodoy

A classe Cliente tem o método charAt???

Não deveria ser listaDeClientes[i].getNome().charAt(0)?

Outra coisa, é melhor na classe Cliente implementar Comparable<Cliente> e depois usar o método Collections.sort ou Arrays.sort para fazer a ordenação automaticamente. Sem o processo da bolha, que é muito ineficiente.

Ou então, comparar os nomes do cliente usando o método compareTo, da classe String, que leva em consideração não só o primeiro caracter da String, como os outros também.

Tem exemplos disso no primeiro link que te passei ali em cima. E você pode ler mais sobre o assunto aqui:
http://www.guj.com.br/posts/list/45985.java#241201

ViniGodoy
FilhoDoRei:
Cara em primeiro lugar utiliza a tag code para facilitar o entendimento.
Melhor ainda é fazer assim, para Strings:
import java.util.Arrays;   
  
public class Ordenacao{   
    public static void main(String ...args){   
        String nomes[] = {"Arruda","João","Álbano", "Bastião", "Éster", "Eduardo", "bruno"};   
           
        Arrays.sort(nomes, Collator.getInstance());   
           
        for(int i=0;i<3;i++){   
            System.out.println(nomes[i] + "\n");   
        }   
    }   
}

Compare a ordenação gerada pelo seu algoritmo (sem o Collator) e com esse aqui. Você vai ver que com o Collator a ordenação fica natural, como num dicionário, agrupando palavras acentuadas juntas, e desprezando o fato das letras serem maiúsculas e minúsculas ao odena-las. :)

FilhoDoRei

Valeu cara vivendo e aprendendo!!!

falws

Criado 7 de junho de 2008
Ultima resposta 8 de jun. de 2008
Respostas 7
Participantes 3