Compare to

[code] public int compareTo(pontuacao p1) {
if(getEscore()>p1.escore){
return 1;
}if(getEscore()<p1.escore){
return -1;
}if(getEscore()==p1.escore){
if (getNome()>p1.getNome()){
return 1;
}
if(getNome()<p1.getNome()){
return -1;
}
if(getNome().equals(p1.getNome()))
return 0;

}[/code]

olá amigos, estou com problema, já pesquisei e não consigo ver a diferença entre comparable e comparator…
e também o codigo acima da erro. Sei que é porque nome não pode ser comparado assim, mas de que jeito fazer .
ps: a solução com diff: … eu n entendo se poderem me explicar …
valeu

Qual a tua dúvida?
A pergunta está bem confusa…

1º como fazer esse compareto ai que está na classe pontuacao ?
porque quando eu comparo nomes ele não da certo.

Jovem,

Existe uma grande diferença entre comparable e comparator. A interface comparable disponíbiliza o método compareTo, já a interface comparator disponíbiliza o método compare.

Faça uma pesquisa rápida no google sobre essas duas interfaces e poste suas dúvidas.

Abs,

Ok, mas só com estas informações é difícil.
Qual o tipo primitivo ou objeto que representa a variável nome?
Posta a classe completa.

[code]import java.util.Iterator;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class pontuacao implements Comparable{
private String nome;
private int escore;

public pontuacao (){
	this(null,0);
}
public pontuacao(String nome,int escore){
	super();
	this.nome = nome;
	this.escore = escore;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public int getEscore() {
	return escore;
}

public void setEscore(int escore) {
	this.escore = escore;
}
public String toString(){
	return ("escore"+escore+"nome"+nome);
}
@Override
	public int compareTo(pontuacao p1) {
	  int diff = p1.escore - escore;  
        return diff == 0 ? nome.compareTo(p1.nome) : diff; 
	}

}[/code]
esse comparetO que não entendo

         public int compareTo(pontuacao p1) {   
          int diff = p1.escore - escore;     
            return diff == 0 ? nome.compareTo(p1.nome) : diff;   
        }

Passa-se um objeto pontuacao pra esse método.

Caso a diferença dos atributos score seja igual a zero (ambos tem o mesmo score), retorna-se a comparação dos nomes (caso sejam iguais, um int (provavelmente -1, 0 ou 1 (Não sei como funciona compareTo de String)). Caso a diferença de scores seja diferente de zero, retorna a diferença.

EDIT - Acabei de testar aqui: String.compareTo(String) retorna a diferença de quantidade de caracteres entre as strings comparadas. 0 para mesma quantidade, um numero negativo caso a string comparada tenha uma quantidade menor de caracteres, e positivo caso tenha quantidade maior do que a string passada como parametro.

EDIT 2 - Observe que não dá pra distinguir se o retorno é a diferença de score ou a diferença de quantidade de caracteres do nome.

EDIT 3 - O primeiro EDIT não é totalmente o correto. Li o JavaDoc desse método, e percebi que o buraco é muito mais embaixo. De qualquer forma, o método retorna 0 se as duas strings forem iguals, e a diferença de caracteres é retornada quando as uma string está contida no inicio da outra, que tem um length maior.

Como será essse compareto com if

[code]public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Escore other = (Escore) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;

}[/code]

e como fazer o equals para o campo pontuacao? consegui so rpa nome

[quote=*robson]Como será essse compareto com if

[code]public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Escore other = (Escore) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;

}[/code]

e como fazer o equals para o campo pontuacao? consegui so rpa nome
[/quote]

O compareTo está usando um if (procure por Operador Ternário). Tente você mesmo codificar o método usando um if comum.

A ideia do equals é verificar se dois objetos possuem o mesmo valor. Se quer comparar pontuacao com pontuacao, pontuacao.equals(pontuacao)

EDIT - Se a “pontuacao” a que você se refere é o atributo ‘escore’ ( que é um tipo primitivo), não é possível usar o equals (tipos primitivos não são classes, e portanto não possuem métodos). Nesse caso, use o == .

pronto fiz o equals de pontuação: isso qeu dizer qeu se eu quiser fazer por exemplo o metodo equals com dois objetos ele vai ver se os dois cmapos sao iguais… ?
por exemplo e.equals(e1); como fazer pra mostrar se sao iguais ou se um é maior que o outro?[code]
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Escore other = (Escore) obj;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;

	else if(pontuacao==0){
		if(other.pontuacao!=0)
			return false;
	}else if(!(pontuacao==other.pontuacao))
		return false;
	return true;
	
	[/code]