2015-03-03 5 views
0
import java.util.*; 
public class testPerson{ 
    public static void main(String[] args){ 
     person Albert = new person(1); 
     person James = new person(2); 
     person Elizabeth = new person(3); 
     person [] personArray = new person[3]; 
     personArray[0] = Albert; 
     personArray[1] = James; 
     personArray[2] = Elizabeth; 
     Arrays.sort(personArray); 
     System.out.println(personArray[0].number); 
     System.out.println(personArray[1].number); 
     System.out.println(personArray[2].number); 
    } 
} 

public class person implements Comparable{ 
    int number; 
    public person(int number){ 
     this.number = number; 
    } 
    public int compareTo(Object o){ 
     if(!(o instanceof person)){ 
      System.out.println("error"); 
      System.exit(1); 
      person newObject = (person) o; 
      if (this.number > newObject.number){ 
       return 1; 
      } 
      else if(this.number == newObject.number){ 
       return 0; 
      } 
     } 
     return -1; 
    } 
} 

Je suis confus quant à la raison pour laquelle la sortie est triée en arrière: 3,2,1. Ma méthode compareTo renvoie un nombre positif quand this.number> number, donc ne devrait-il pas s'assurer que les nombres sont triés dans l'ordre - du plus petit au plus grand? MerciComparable Java Commande

+0

Si je lis la plus externe 'if' dans votre déclaration' compareTo' correctement, ressemble à la méthode retourne toujours -1 ... – mazaneicha

+0

Protip - 'Comparable ' wi ll travaille beaucoup mieux que 'Comparable' ici – Mshnik

+0

Oh, vous avez raison. Merci! – aaa

Répondre

0

Vous avez une erreur dans votre méthode compareTo qui renvoie toujours -1. Cependant, vous pouvez simplifier votre méthode compareTo tout à fait un peu en mettant en œuvre Comparable<Person> plutôt que Comparable:

class Person implements Comparable<Person> { 
    public int compareTo(Person other) { 
     return this.number - other.number; 
    } 
} 
0

Vous ne devez changer votre méthode compareTo à ce qui suit, il peut renvoyer une erreur dans le cas où le passé n'est pas une instance de person, sinon il sera jeté l'objet passé et de le comparer:

public int compareTo(Object o){ 
    if(!(o instanceof person)){ 
     System.out.println("error"); 
     System.exit(1); 
    } 

    person newObject = (person) o; 
    if (this.number > newObject.number){ 
     return 1; 
    } 
    else if(this.number == newObject.number){ 
     return 0; 
    } 
    return -1; 
} 
+0

Alors qu'est-ce que le -1 et 1 signifient effectivement. Comment puis-je trier les choses comme je le veux? – aaa

+0

Comme le dit la documentation: 'un entier négatif, zéro, ou un entier positif car cet objet est inférieur, égal ou supérieur à l'objet spécifié. 'Http://docs.oracle.com/javase/7/docs /api/java/lang/Comparable.html – fujy