Minha duvida ordenaçao com string

12 respostas
S

oi gente sou nova aqui precisava de uma ajudinha eh assim tenho que fazer esse exercicio aqui
Escreva um programa em Java que utilize o Bubble-Sort para ordenar de forma decrescente um array de inteiros com 10 elementos.
Depois mostre o menor elemento, o maior elemento e todos os elementos na ordem decrescente.

eu sei ordenar numeros e nao string se alguem poder me ajudar.
public class BUbbleSort {

    public static void main(String[] args) {
      String[] v={"j","e","s","s","i","c","a"};

            
        for(int i=0;i<v.length-1;i++){
        for(int j=0;j<v.length-1-i;j++){
        if(v[j].compareTo>[j+1])>0{
            int aux = v[j];
            v[j]=v[j+1];
            v[j+1]=aux;
         
        }
    }

}
        for(int k=0;k<v.length;k++){
            System.out.print(v[k]);
        }
        
        
        for(int k=v.length; k > 0;k--){   
    System.out.print(v[k-1]);   
}  

        }
    }

12 Respostas

T
if(v[j]>v[j+1]){
...

De fato, se você vai comparar 2 strings, você tem de usar compareTo. Você teria de usar:

if(v[j].compareTo([j+1]) > 0){
...
S

eu coloqueii mais deu erro tb.

airton.asg

Ola Linda,
Sei que não deve ser a melhor forma, mas aproveitando todo seu código, e o que deve ter sido passado a você, tente dessa forma... Apenas transformando umas variaveisinhas... hehehe...

public class BubbleSort {   

	public static void main(String[] args) {   
		String[] v={"j","e","s","s","i","c","a"};   

		for(int i=0; i < v.length - 1; i++){   
			for(int j=0; j < v.length - 1 - i; j++){
				char caracter1 = (v[j]).charAt(0);
				char caracter2 = (v[j+1]).charAt(0);
				if(caracter1 > caracter2){   
					char aux = caracter1;   
					v[j] = v[j+1];   
					v[j+1] = new String().valueOf(aux);   

				}   
			}   

		}   
		
		for(int k=0; k < v.length; k++){   
			System.out.print(v[k]);   
		}   


		for(int k=v.length; k > 0;k--){     
			System.out.print(v[k-1]);     
		}     

	}   
}

Deve ter algo melhor, o thingol deu uma ideia que com certeza eh melhor que a minha, pois compara duas Strings diretamente sem converter para caratere, mas, esta aqui funcionou...
Espero ter ajudado...

quikkoo
if (v[j].compareTo > [j + 1]) > 0 ...

que confusão isso hein… muda pra isso:

if (v[j].compareTo(v[j + 1]) > 0) ...

e a variável ‘aux’ deve ser do tipo ‘String’ e ñ ‘int’

inté…

S
eu fiz oq vc falou

mais agora ta dando erro na classe bubblesorte

esse erro a

init:

deps-jar:

Compiling 1 source file to C:\Documents and Settings\Administrador\Meus documentos\NetBeansProjects\pequeno2\build\classes

C:\Documents and Settings\Administrador\Meus documentos\NetBeansProjects\pequeno2\src\pequeno2\BUbbleSort.java:3: class BubbleSort is public, should be declared in a file named BubbleSort.java

public class BubbleSort {

1 error

CONSTRUÇÃO FALHOU (tempo total: 1 segundo)

e uma pergunta
quando for ordenar os elementos deve ser avisado se os elementos devem ser ordenados de forma crescente ou decrescente.
eh so colocar um if?
grata pela ajuda.

e-cowboy
public static void main(String[] args) throws ErroPersonalizado 
	{
		String[] v={"j","e","s","s","i","c","a"};
		
		for(int i=0;i<v.length-1;i++)
		{
			for(int j=0;j<v.length-1-i;j++)
			{
				if(v[j].compareTo(v[j+1])>0)
				{   
		            String aux = v[j];   
		            v[j]=v[j+1];   
		            v[j+1]=aux;   
		        }
			}
		}
		
System.out.println("Maior Elemento: "+v[v.length-1]);
System.out.println("Menor Elemento: "+v[0]);

		for(int k=0;k<v.length;k++)
		{
			System.out.print(v[k]);
		}
	}

Talvez funcione agora!

TangZero

Olá,

Vocês não se atentaram a resposta do thingol… a forma coma ssica silva colocou o campareTo está sintaticamente errada… além de alguns erros relacionados aos tipos…

public class BUbbleSort {

	public static void main(String[] args) {
		String[] v = { "j", "e", "s", "s", "i", "c", "a" };

		for (int i = 0; i < v.length - 1; i++) {
			for (int j = 0; j < v.length - 1 - i; j++) {
				if (v[j].compareTo(v[j + 1]) > 0) {
					char aux = v[j].charAt(0);
					v[j] = v[j + 1];
					v[j + 1] = String.valueOf(aux);
				}
			}
		}
		
		// crescente
		System.out.println("Crescente:");
		for (int k = 0; k < v.length; k++) {
			System.out.print(v[k]);
		}

		// decrescente
		System.out.println("\n\nDecrescente:");
		for (int k = v.length; k > 0; k--) {
			System.out.print(v[k - 1]);
		}

	}
}

Dessa maneira o compareTo está sendo usado corretamente…
Obrigado thingol… :wink:

S
ssica silva:
oi gente sou nova aqui precisava de uma ajudinha eh assim tenho que fazer esse exercicio aqui Escreva um programa em Java que utilize o Bubble-Sort para ordenar de forma decrescente um array de inteiros com 10 elementos. Depois mostre o menor elemento, o maior elemento e todos os elementos na ordem decrescente. eu sei ordenar numeros e nao string se alguem poder me ajudar.
public class BUbbleSort {

    public static void main(String[] args) {
      String[] v={"j","e","s","s","i","c","a"};

            
        for(int i=0;i<v.length-1;i++){
        for(int j=0;j<v.length-1-i;j++){
        if(v[j].compareTo>[j+1])>0{
            String aux = v[j];
            v[j]=v[j+1];
            v[j+1]=aux;
         
        }
    }

}
        for(int k=0;k<v.length;k++){
            System.out.print(v[k]);
        }
        
        
        for(int k=v.length; k > 0;k--){   
    System.out.print(v[k-1]);   
}  

        }
    }
airton.asg

De qual forma você tentou Jessica?
O erro que está dando parece ser, que vc esta tentando compilar a classe informando nome errado, verifique o que foi digitado na hora de compilar. (BUblesort --> BubbleSort)

ViniGodoy

Você é da mesma turma dessa outra pessoa?
http://www.guj.com.br/posts/list/91892.java

Ou seria a mesma pessoa? :shock:

Mas, enfim, a solução é basicamente a mesma que postei por lá, mas trocando o sinal de > pelo método compareTo:

public class Teste {
    public static void main(String[] args) {
        String vetor[] = {"z","a","b","c","d","y","o","w","f","k"};
        
        for (int i = 0; i < vetor.length-1; i++)
            for (int j = i+1; j < vetor.length; j++) 
                if (vetor[i].compareTo(vetor[j]) < 0) { //Ordem descrescente
                    String aux = vetor[i];
                    vetor[i] = vetor[j];
                    vetor[j] = aux;
                }
        
        System.out.print("Números em ordem: ");
        for (String str : vetor)
            System.out.print(str + " ");
        System.out.println();
        
        System.out.println("Maior: " + vetor[0]);
        System.out.println("Menor: " + vetor[vetor.length-1]);
    }
}
ViniGodoy

Quando você está ordenando Strings, o ideal mesmo é usar a classe Collator.

O Collator irá ordenar as palavras como um dicionário faria.

Compare:

public class Teste { public static void main(String[] args) { List<String> x = Arrays.asList("Ana", "Ácido", "Beta", "Úmido", "Ulisses", "Carlos", "Célebre"); Collections.sort(x); System.out.println("Ordenação tradicional: " + x); Collections.sort(x, Collator.getInstance()); System.out.println("Ordenação com collator: " + x); } }

A saída é:
Ordenação tradicional:[Ana, Beta, Carlos, Célebre, Ulisses, Ácido, Úmido]
Ordenação com collator:[Ácido, Ana, Beta, Carlos, Célebre, Ulisses, Úmido]

Note como a segunda é mais natural. Normalmente não deixamos palavras com acento no final.

O collator possui um método compare, como o próprio string. Se você quiser usa-lo no seu bubbesort, tem que fazer o if assim:

if (Collator.getInstance().compare(vetor[i], vetor[j]) < 0)
S

e da minha sala da facu.

Criado 26 de maio de 2008
Ultima resposta 26 de mai. de 2008
Respostas 12
Participantes 7