Sortieralgorithmus

Kid

Mitglied
hey Leute, ich habe mal wieder eine Frage und zwar zu der If-Schleife in der Sortiermethode. Ich soll mit diesem Sortierverfahren nach den Nachnamen sortieren, welche ich noch mit Vornamen und und und in einem Array gespeichert habe, siehe Anhang. Aber wie kann ich das? Kann mir das mal jemand erklären bitte? Im Anhang nochmal der ganze Quellcode.
Java:
public void sortieren(Person[] array) {

        int laenge = array.length;
        int i = 0;

        while (i < laenge) {
            int index = i;
            int n = i + 1;
            while (n < laenge) {
                if (array[index].compareTo(array[n])) {
                    index = n;
                } else {
                    continue;
                }
                n = n + 1;
            }
            Person temp = array[index];
            array[index] = array[i];
            array[i] = temp;
            
            i = i + 1;
        }
        for (int x = 0; x <= array.length - 1; x++) {
            System.out.println(array[x]);
        }
    }
 

Anhänge

  • Person.java
    908 Bytes · Aufrufe: 8
  • Test_6.java
    1 KB · Aufrufe: 6
  • Verwaltung.java
    1,1 KB · Aufrufe: 8
Zuletzt bearbeitet von einem Moderator:

Luecx

Mitglied
A: es gibt keine If- Schleifen
B: dein Algorythmus würde funktionieren, ist aber wenn man die Laufzeit betrachtet nicht sinnvoll
C: Quick oder Merge-sort sind bessere Methoden mit einer Laufzeit von nLog(n), (Merge-Sort ist jedoch hierbei noch ein wenig schneller(im Durchschnitt)

Also: es Wäre sinnvoll eine Methode zu schreiben die 2 Buchstaben miteinander vergleichen kann und entweder true oder false zurück liefert:

Java:
 public boolean vergleicheZweiBuchstaben(String a, String b){
        a = a.toUpperCase();
        a = b.toUpperCase();
        char aN = a.charAt(0);
        char bN = b.charAt(0);
        return ((int)aN > (int)bN );
    }

Die Methode vergleicht zwei Buchstaben und unabhängig ob sie groß oder klein sind, wird true zurückgeben wenn a > b ist (Z.B "W" > "E")
ansonsten wird false wiedergegeben
 

Kid

Mitglied
Also leider funktioniert der Algorithmus nicht. Folgender Fehler wir mir angezeigt: The method compareTo(Person) is undefined for the type Person. Am liebsten würde ich auch einen anderen Sortieralgorithmus nutzen, doch steht in der Aufgabenstellung, dass ich diesen verwenden soll.
 

Luecx

Mitglied
Achso, okay tut mir leid, hab nicht richtig gelesen, dann musst du die Methode einfach überschreiben, es ist aber auch möglich alles in eine arraylist zu packen und dann die einfach zu sortieren, ist ein Einzeiler :p

Mit freundlichen Grüßen,
 

Luecx

Mitglied
Vielleicht solltest du aber auch die Namen der Personen vergleichen und nicht die beiden Person an sich. Wenn es die Methode compareTo für strings gibt dann müsstest du die Abfragen ändern, z.b array.getName().compareTo(array[k].getName())....

Ich weiß nicht wie dein Programm aufgebaut ist aber in der Klasse Person sollte es ein Attribut "name" geben + getter und setter für das Attribut.

Mfg.
 
Zuletzt bearbeitet:

Saheeda

Top Contributor
@Luecx
Wenn man compareTo überschreibt, kann man selbst festlegen, anhand welcher Kriterien verglichen werden soll.

@Topic
Die Klasse Person muss Comparable implementieren. Dann überschreibst du die compareTo und fertig
 

Kid

Mitglied
Ehrlich gesagt habe ich von "Comparable implementieren" noch nie gehört. So weit sind wir noch nicht mit dem Lehrstoff. Kannst du mir erklären, was es macht und wie es funktioniert?
 

Luecx

Mitglied
Implementieren tut man Interfaces, ganz schnell gesagt: ein Interface gibt vor was für Methoden in der Klasse die von dem Interface erbt enthalten muss, der Inhalt dieser Methoden ist aber nicht vorgegeben. Zum Beispiel wenn du keyListener implementierst, hast du bestimmte Methoden ohne die das Programm nicht läuft, das Interface comparable gibt vor, dass du in deiner Klasse die Methode .comparaTo überschreiben musst. Sämtliche Methoden in einem Interface sind als komplett abstrakt
 

Saheeda

Top Contributor
@Kid

Java:
class Person implements Comparable<Person>{

@Override
	public int compareTo(Object o) {
		Person other = Person(o)
		if(other.getAge() < this.age){
		return -1;
		}
		else if(other.getAge() > this.age){
			return 1;
		} else {
			return 0;
		}
	}
}

Comparable gehört zu den Standard Java-Interfaces.
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

In der Methode musst du nur noch festlegen, anhand welcher Kriterien verglichen werden soll. In dem Beispiel oben z.B. anhand des Alters. Genaueres dazu findest du in der Doku.
 

Ähnliche Java Themen

Neue Themen


Oben