[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]