Array Ajuda por favorr

3 respostas
Jaison

Pessoal eu preciso ordenar um array com o seguinte critério:

if(deputado[i].getVotos()<deputado[i+1].getVotos()){

essa maneira q to fazendo tah dando posição do array q não existe! mas não sei como proseguir. :frowning:

Será q tem algum método pronto e eu não conheço!!!

Abraços e espero resposta!!!

Jaison

3 Respostas

brunogamacatao

Cara é só fazer tua classe deputado implementar a interface Comparable, implementando devidamente o método compareTo. Após isso basta chamar o método Arrays.sort passando o seu array como parâmetro.

S

Jaison,

o método deputado[i].getVotos() retorna que tipo? Se for int tudo bem.
Se for String, faz um parseInt primeiro antes de fazer a comparação.

Outra coisa, está lançando uma indexOutOfRange porque na sua rotina de comparação,

<code>

if(deputado[i].getVotos()<deputado[i+1].getVotos()){

></code>

vc está incrementando o contador em i+1. Vai chegar uma hora em que o seu o contador do seu loop irá montar uma instrução [i+1] que passa do tamanho do seu array.

Uma solução pra esse tipo de comparação é criar um for dentro do outro.

<code>
for (int i = 0; i < listaDeputado.length(); i++) {

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

// Faça suas comparaçõe aqui.

}

}
</code>

brunogamacatao

Cara, não vamos reinventar a roda, vamos usar as funcionalidades prontas que já vêm no JDK.
Vamos supor que esse seja o código da sua classe Deputado com as modificações que eu falei:

public class Deputado implements Comparable {
 private int votos;

 public int getVotos() {
   return votos;
 }

 public void setVotos(int votos){
   this.votos = votos;
 }

 public int compareTo(Object obj){
   Deputado deputado = (Deputado)obj;
   return getVotos() - deputado.getVotos();
 }
}

Dado que você fez a modificação supra citada, pra ordenar um array de deputados você só precisa fazer o seguinte:

Arrays.list(deputados);

Pronto cara, array ordenado com sucesso.

Criado 10 de abril de 2006
Ultima resposta 10 de abr. de 2006
Respostas 3
Participantes 3