Dúvidas em relação a array

3 respostas
M

Pessoal,

Estou iniciando em Java e estou com uma dúvida em relação a um exemplo do livro Java Como Programar, que mostra como classificar valores de um array.
O exemplo usa um "for" que serve para controlar o número de passagens, mas o próximo "for" que controla o número de comparações, já percorre todas as posições do array ordenando-o. Achei estranho e fiz um teste inibindo o primeiro "for"..... e o programa funcionou corretamente. Minha dúvida é a seguinte : Esse primeiro "for" tem alguma outra função que eu não esteja entendendo ?
Segue abaixo o programa para facilitar o entendimento.

import java.awt.*;
import javax.swing.*;

public class BubbleSort extends JApplet {
    
    public void init()
    {
        JTextArea AreaSaida = new JTextArea();
        Container container = getContentPane();
        container.add(AreaSaida);
        
        int array[] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
        
        String saida = "Números na ordem original\n";
        
        //Acrescenta valores originais do array ao String saida
        for (int cont = 0; cont < array.length; cont++)
            saida += " " + array[cont];
        
        Ordena(array);   //ordena o array
        
        saida += "\n\nNúmeros em ordem crescente\n";
        
        //Acrescenta valores ordenados do array ao String saida
        for (int cont = 0; cont < array.length; cont++)
            saida += " " + array[cont];
        
        AreaSaida.setText(saida);
        
    }
    
    
    //Método que ordena os elementos do array
    public void Ordena (int array2[])
    {
        //laço para controlar o número de passagens
        [b]for (int pass = 1; pass < array2.length; pass++) {[/b]            
            //laço para controlar o número de comparações
            for (int element = 0; element < array2.length - 1; element++) {
                
                //compara elementos adjacentes e os troca de lugar se
                //o primeiro elemento for maior que o segundo elemento
                if (array2[element] > array2[element + 1] )
                    troca(array2, element, element + 1);
            } //fim do laço p/ controlar comparações
            
        [b]} //fim do laço para controlar passagens[/b]        
    } //fim do método Ordena
    
    
    //Método que troca dois elementos de um array
    public void troca(int array3[], int num1, int num2)
    {
        int hold;  //área de armazenamento temporário para troca
        
        hold = array3[num1];
        array3[num1] = array3[num2];
        array3[num2] = hold;
    }
    
}  //Fim da Classe BubbleSort

Obrigada,
Márcia.

[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos para ficarem mais legíveis - Reifel[/color][/size] :joia:

3 Respostas

S

Oi Marcia,

Esse primeiro for:

for (int pass = 1; pass < array2.length; pass++) {

deve estar a mais nesse codigo, porque ele está interando varias vezes o mesmo array e não está marcando o numero de passagens, tanto que o valor dele (pass) não é usado para mais nada a não ser interar o for. Seria como se cada vez que ele faz um loop no for, pede mais uma vez para ordernar o array no segundo for.

J

Olá, acho que o metodo correto seria esse…

public void ordena(int[] array){
 //aqui ela pega cada elemento do array 
 for (int i = 0; i < array.length; i++){
   /*aqui ele compara esse elemento com todos os outros de tras pra frente, pra saber se tem algum menor que ele...*/
  for (int j = array.length - 1; j > i; j--){
   if (array[j] < array[i]) troca(array, i, j);
  }
 }
}

:idea:

pelo que parece isso é só um exercicio mesmo… se for tudo bem, se não tem uma forma mais facil de fazer isso… usa a classe Arrays, que tem um metodo sort() que ordena pra você…

int[] array = {1, 5, 3, 2, 6 , 10};

   java.util.Arrays.sort(array);
M

É…esse é um exercício do livro “Java como Programar”, eu só estava reproduzindo.

Valeu pessoal…

Muito obrigada pelas respostas !

Criado 18 de agosto de 2005
Ultima resposta 19 de ago. de 2005
Respostas 3
Participantes 3