2016-04-11 9 views
0

Also soll ich dieses Programm erstellen, das ein Array von Personen erstellt, die nach einer Methode in der Klasse Algorithmen sortiert ist. Ich soll die Schnittstelle Sortierbar erstellen, die eine Vergleichsmethode namens compareTo definiert, die zwei Objekte vergleichen soll, um zu sehen, was zuerst kommt. Die Personenklasse repräsentiert eine Person und implementiert Sortable, und die Algorithms-Klasse hat eine Methode namens sort, die ein Array aus sortierbaren Objekten (Personen) übernimmt und diese sortiert. Ich stecke fest, und mein Kursbuch hilft mir hier nicht sehr.Sortierung Array von Personen mit Sortiermethode

public interface Sortable <T> { 
int compareTo(T ob); 
} 

.

public class Algorithms implements Sortable <Person>{ 

    public int compare(Person p1, Person p2){ 
     return p1.lastName().compareTo(p2.lastName()); 
    } 
} 

.

public class Person implements Sortable<Person> 
{ 
String firstName; 
String lastName; 
String dob; 

public Person (String lastName, String firstName, String dob){ 
this.lastName=lastName; 
this.firstName=firstName; 
this.dob=dob; 
} 

public String lastName(){ 
return lastName; 
} 

public String firstName(){ 
return firstName; 
} 
public String dob(){ 
return dob; 
} 

@Override 
public int compareTo(Person o){ 
    Person p = (Person)o; 
    int last = lastName.compareTo(o.lastName); 
     return last; 
} 

public String toString(){ 
return "Namn "+ lastName +" "+ firstName +" Personnummer: "+dob; 
} 
} 

.

public class Personer { 
public static void main(String[]args){ 
    Person p1 = new Person ("Ek","Ida","530525-0055") ; 
    Person p2 = new Person ("Björk","Sten","650203-0250"); 
    Person p3 = new Person ("Al", "Bengt","881212-4455"); 

    List <Person> list = new ArrayList<>(); 
    list.add (p1); 
    list.add (p2); 
    list.add (p3); 

    Arrays.sort(list, new Algorithms()); 

    System.out.println("lista: "+list); 

} 
} 

Die Frage ist wirklich, was muß ich tun, um diesen Code zu tun, was ich tun will, was am Ende ist out die Namen und dob von einer Reihe von Menschen in alphabetischer Reihenfolge drucken basierend om Nachnamen

+0

haben Sie versucht, zu debuggen? –

+0

Ich denke, Sie sollten "Vergleichbar" implementieren. –

Antwort

1

Sie implementieren Soll Comparable auf Ihre Person Klasse:

public class Person implements Comparable<Person> { 
    String firstName; 
    String lastName; 
    String dob; 

    public Person(String lastName, String firstName, String dob) { 
     this.lastName = lastName; 
     this.firstName = firstName; 
     this.dob = dob; 
    } 

    public String lastName() { 
     return lastName; 
    } 

    public String firstName() { 
     return firstName; 
    } 

    public String dob() { 
     return dob; 
    } 

    @Override 
    public int compareTo(Person o) { 
     int last = lastName.compareTo(o.lastName); 
     return last; 
    } 

    public String toString() { 
     return "Namn " + lastName + " " + firstName + " Personnummer: " + dob; 
    } 
} 

Und verwenden Collections#sort Methodenliste

public class Personer { 
    public static void main(String[] args) { 
     Person p1 = new Person("Ek", "Ida", "530525-0055"); 
     Person p2 = new Person("Björk", "Sten", "650203-0250"); 
     Person p3 = new Person("Al", "Bengt", "881212-4455"); 

     List<Person> list = new ArrayList<>(); 
     list.add(p1); 
     list.add(p2); 
     list.add(p3); 

     Collections.sort(list); 

     System.out.println("lista: " + list); 

    } 
} 
012 sortieren

Diese beiden Klassen sind nur erforderlich.

0

Sie können die in Collections verfügbare Methode sort verwenden. Verwenden Sie eine anonyme innere Klasse, um eine neue Comparator zu erstellen, die auf der lastName vergleicht, wenn Sie die compareTo in Ihrer Person Klasse nicht beschränken möchten, um nur unter lastName zu vergleichen.

Collections.sort(list, new Comparator<Person>() { 

     @Override 
     public int compare(Person o1, Person o2) { 
      return o1.lastName().compareTo(o2.lastName()); 
     } 
    }); 
0

Ändern Algorithmen Klasse und implementieren Vergleicher Schnittstelle

import java.util.Comparator; 
    public class Algorithms implements Comparator <Person>{ 

     public int compare(Person p1, Person p2){ 
      return p1.lastName().compareTo(p2.lastName()); 
     } 
    } 

Für Sortierung (in Personer Klasse) verwenden

List <Person> list = new ArrayList<>(); 
list.add (p1); 
list.add (p2); 
list.add (p3); 
list.sort(new Algorithms());