Jump to content

[Resolvido] ordenacao


AJBM

Recommended Posts

Boas! Eu tenho esta classe e queria ordenar pelo numero, alguem me pode dar uma dica

public class Utilizador {
private String nome;
private String password;
private String tipo;
private long numero;
public Utilizador(String nome, String password, long numero, String tipo) {
 this.setNome(nome);
 this.setPassword(password);
 this.setTipo(tipo);
 this.setNumero(numero);
}
public Utilizador( String password, long numero) {
 this.setPassword (password);
 this.setNumero(numero);
}
@Override
public String toString() {
 return "Utilizador{" + "nome=" + nome + ", password=" + password + ", tipo=" + tipo + ", numero=" + numero + '}';
}
@Override
public boolean equals(Object obj) {
 if (obj == null) {
	 return false;
 }
 if (getClass() != obj.getClass()) {
	 return false;
 }
 final Utilizador other = (Utilizador) obj;
 if (this.numero != other.numero) {
	 return false;
 }
 return true;
}
@Override
public int hashCode() {
 int hash = 3;
 hash = 83 * hash + (int) (this.numero ^ (this.numero >>> 32));
 return hash;
}

public long getNumero() {
 return numero;
}
public final void setNumero(long numero) {
 this.numero = numero;
}

/**
 * @return the nome
 */
public String getNome() {
 return nome;
}
/**
 * @return the password
 */
public String getPassword() {
 return password;
}


/**
 * @param nome the nome to set
 */
public final void setNome(String nome) {
 if (nome != null || !nome.trim().equals("")) {
	 this.nome = nome;
 }
}
/**
 * @param password the password to set
 */
public final void setPassword(String password) {
 if (password == null || password.trim().equals("")) {
 } else {
	 this.password = password;
 }
}
/**
 * @return the tipo
 */
public String getTipo() {
 return tipo;
}
/**
 * @param tipo the tipo to set
 */
public final void setTipo(String tipo) {
 this.tipo = tipo;
}
}
Edited by Baderous
geshi
Link to comment
Share on other sites

Eu estou a utilizar arrays,e fiz este método ele ordena os números, o erro acho que esta aqui conjUtilizadores= conjUtilizadores[j]

String ordenarListar() {
 String dados = "";
 long[] tmp = new long[conjUtilizadores.length];
 for (int i = 0; i < conjUtilizadores.length; i++) {
	 tmp[i] = conjUtilizadores[i].getNumero();
 }

 Arrays.sort(tmp);
 for (int i = 0; i < conjUtilizadores.length; i++) {
	 for (int j = 0; j < conjUtilizadores.length; j++) {
		 if(tmp[i]==conjUtilizadores[j].getNumero()){
			 conjUtilizadores[i]=conjUtilizadores[j];

		 }
	 }

 }
 for (int i = 0; i < conjUtilizadores.length; i++) {
	 dados=dados+i+"-"+conjUtilizadores[i].getNome()+"\n";
 }
 return dados;
}
Link to comment
Share on other sites

Dá uma vista de olhos neste exemplo:

http://www.javadeveloper.co.in/java-example/java-comparator-example.html

É mais simples, e penso que mais eficaz e correcto...

Edited by joelbrito

Engenharia de Sistemas Informáticos @ IPCA

"Estou convencido de que cerca de metade do que separa os empreendedores de sucesso daqueles malsucedidos é a pura perseverança." - Steve Jobs

Link to comment
Share on other sites

?? para que esse código todo ??

o Array.sort já te faz o que pretendes !!!

 String ordenarListar() {
           String dados = "";
           long[] tmp = new long[conjUtilizadores.length];
           for (int i = 0; i < conjUtilizadores.length; i++) {
                   tmp[i] = conjUtilizadores[i].getNumero();
           }

           Arrays.sort(tmp);

           /* ISTO NÃO FAZ NADA !!!
              QUERE ORDENAR O QUE JÁ ESTÁ ORDENADO ??
           for (int i = 0; i < conjUtilizadores.length; i++) {
                   for (int j = 0; j < conjUtilizadores.length; j++) {
                           if(tmp[i]==conjUtilizadores[j].getNumero()){
                                conjUtilizadores[i]=conjUtilizadores[j];
                           }
                   }
           }
           */
           for (int i = 0; i < conjUtilizadores.length; i++) {
                   dados=dados+i+"-"+conjUtilizadores[i].getNome()+"\n";
           }
           return dados;
   }
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

obrigado ja consegui 👍

?? para que esse código todo ??

o Array.sort já te faz o que pretendes !!!

 String ordenarListar() {
		String dados = "";
		long[] tmp = new long[conjUtilizadores.length];
		for (int i = 0; i < conjUtilizadores.length; i++) {
				tmp[i] = conjUtilizadores[i].getNumero();
		}

		Arrays.sort(tmp);

		/* ISTO NÃO FAZ NADA !!!
		   QUERE ORDENAR O QUE JÁ ESTÁ ORDENADO ??
		for (int i = 0; i < conjUtilizadores.length; i++) {
				for (int j = 0; j < conjUtilizadores.length; j++) {
						if(tmp[i]==conjUtilizadores[j].getNumero()){
							 conjUtilizadores[i]=conjUtilizadores[j];
						}
				}
		}
		*/
		for (int i = 0; i < conjUtilizadores.length; i++) {
				dados=dados+i+"-"+conjUtilizadores[i].getNome()+"\n";
		}
		return dados;
}

Eu tenho um array que tem utilizadores. E os utilizadores como atributos nome numero etc, e eu queria ordenar por numero, então criei um array só com os números, e ordenei mas depois tinha que atribuir os números aos utilizadores, para isso utilizei tmp==conjutilizadores[j].getNumero() o utilizador que estava na posição i ficava com o conteúdo da posição j. Ou seja ficava os utilizadores ordenados

Link to comment
Share on other sites

Tens de adicionar isto ao tua classe:

public class Utilizador implements Comparable<Utilizador>{

isso vai te obrigar a adicionar a tua class o metodo:

@Override
public int compareTo(Utilizador t) {
		if(getNumero() > t.getNumero())
			return 1;
		else if(getNumero() < t.getNumero())
			return -1;
		else
			return 0;
	}

Depois disto para ordenares o teu array basta fazer:

Arrays.sort(conjUtilizadores);
Edited by skinie18
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.