Ordenação

5 respostas
M

Olá pessoal, tentei fazer uma ordenação utilizando o método compareTo para colocar a lista na Collection.sort mas está me retornando o salário menor primeiro
eu acho que isso está errado, a seguir o código:

public class ContaCorrente extends Conta implements Tributavel, Comparable<ContaCorrente>{
    
    @Override
      double taxa (double taxa){
        this.taxas +=  (taxa * 2);
        return this.taxas;
    }

    @Override
    public double calculaTributos() {
           return this.getSaldo() * 0.01 + this.taxas;
    }

    @Override
    public int compareTo(ContaCorrente contas) {
        if(this.saldo < contas.saldo)
            return -1;
        
        if(this.saldo > contas.saldo)
            return 1;
        else        
            return 0;
    }           
}
public class Banco {

    public static void main(String[] args) {
          
        ContaCorrente cc = new ContaCorrente();
        ContaCorrente cc2 = new ContaCorrente();
                        
        cc.saldo = 6454.20;
        cc2.saldo = 4654.65;
        
        List<ContaCorrente> contas = new ArrayList<>();
        contas.add(cc);
        contas.add(cc2);
        
        Collections.sort(contas);
        
     for(int i = 0; i < contas.size(); i++)   
         System.out.println(contas.get(i).saldo);
    }
}

sei que está com alguns erros de boa pratica pos estou puxando o atributo sem método get mas é só um exercicio pessoal.

5 Respostas

ViniGodoy

A ordenação é crescente, do menor para o maior. Se quer decrescente, inverta seu método compareTo.

M

AAAaaaaa bom se é assim sim, eu achei que ela deveria mostrar de forma decrescente vlw ai velho .

E

Isso se chama “wishful thinking” - você gostaria de que uma determinada coisa funcionasse de um determinado jeito e não pesquisa para ver se é desse jeito mesmo.
Você até conseguiu descobrir que o seu comparador comparava de forma crescente, mas empacou porque você gostaria que as coisas funcionassem de um determinado jeito e elas funcionam, na verdade, do jeito que elas foram criadas (ou seja, por padrão a ordenação é por ordem crescente, não decrescente).

Uma forma bem fácil de mudar a ordenação e fazê-la por ordem decrescente é usar o método Collections.reverseOrder ( http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#reverseOrder() se for usar Comparable, http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#reverseOrder(java.util.Comparator) se for usar Comparator) .
O retorno desse método deve ser passado ao método sort ( http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator) ).

E

Eu não sei se puxar o atributo sem método é uma má prática.
Em determinados casos eu até acho mais prático - por exemplo, quando quero dar um exemplo bem curtinho aqui no GUJ, eu não me preocupo com setters e getters, porque quero enfatizar o principal (como é feito em alguns livros didáticos).
Mas, obviamente, se você for fazer uma prova para obter um estágio ou um emprego, deve usar direitinho todos os setters e getters, até porque Java se tornou o Cobol moderno e tem muita gente na área que não enxerga um palmo diante do nariz hoje em dia.

ViniGodoy

entanglement:
Eu não sei se puxar o atributo sem método é uma má prática.
Em determinados casos eu até acho mais prático - por exemplo, quando quero dar um exemplo bem curtinho aqui no GUJ, eu não me preocupo com setters e getters, porque quero enfatizar o principal (como é feito em alguns livros didáticos).
Mas, obviamente, se você for fazer uma prova para obter um estágio ou um emprego, deve usar direitinho todos os setters e getters, até porque Java se tornou o Cobol moderno e tem muita gente na área que não enxerga um palmo diante do nariz hoje em dia.

Eu tenho um conjunto de classes matemáticas para computação gráfica e operações com vetores.
Nelas, deixei as variáveis x e y públicas.

As primeiras pessoas que usaram, insistiram para eu colocar gets e sets, mesmo sendo permitido atribuir a essas duas variáveis qualquer valor.

Como os tipos de dados não mudam e o Java não suporta extensões como SSE, não vi qualquer motivo que justificasse encapsular os tipos de dados nesse caso. Deixa-los públicos ainda dá a vantagem adicional de permitir manipular x e y com operadores matemáticos:

vector.x += 10;
Criado 29 de julho de 2012
Ultima resposta 30 de jul. de 2012
Respostas 5
Participantes 3