quickSort eines Objekt-Arrays geht nicht!

puelo

Mitglied
Hallo,

ich wollte wieder mal etwas für die Uni programmieren und bin dabei auf folgendes Problem gestoßen:

Erstmal die Aufgabenstellung kurz und knackig: Es geht um ein Array welches Objekte (in dem Fall ausgeliehene Bücher enthält). Zu diesem Array kann man Bücher hinzufügen oder entfernen. Die Größe des Arrays wird übergeben und im Konstruktur erzeugt. Klassen gibt es folgende:
Book (Das Buch-Objekt mit Autor , Titel und Jahr)
BorrowedBooks (Die Klasse in welchem das Array erzeugt wird und die Funktionen implementiert sind)

Jetzt haben wir außerdem eine Sort.java Klasse in welcher die Methode quickSort(Compareable[] buf) ist, die das Array ordnen soll.
Meine Book.java Klasse implementiert das Interface Comparable und überschreibt die Methode compareTo().

Hier jeweils der Code:

Comparable.java

Java:
public interface Comparable {
    
    int compareTo(Object o);
}

Book.Java

Java:
public abstract class Book implements Comparable{
    private String author;
    private String title;
    private int year;

......
....
..

@Override
    public int compareTo(Object o){
        
        if(o instanceof Book){
            
            Book b = (Book) o;
            
            if(this.title.compareTo(b.title)== 0){
            
                if(this.author.compareTo(b.author)== 0){
                    
                    if(this.year > b.year){
                        return 1;
                    }else if(this.year < b.year){
                        return -1;
                    }else{
                        return 0;
                    }

                }else{
                    return this.author.compareTo(b.author);
                }
                
        }
         return this.title.compareTo(b.title);
        }
        else return 0;
        
    }

Hier die Sort.java mit quickSort Methode

Java:
public class Sort {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    private static void quickSort(Comparable[] buf, int lo, int hi) {
        assert(lo >= 0 && lo <= hi && hi < buf.length);

        Comparable pivot = buf[ (lo+hi) / 2 ];

        int l = lo, r = hi;
        while (l <= r) {
            while (buf[l].compareTo(pivot) < 0) {
                l++;
            }

            while (buf[r].compareTo(pivot) > 0) {
                r--;
            }

            if (l <= r) {
                Comparable tmp = buf[l];
                buf[l] = buf[r];
                buf[r] = tmp;
                l++;
                r--;
            }
        }

        if (r > lo) {
            quickSort(buf, lo, r);
        }

        if (l < hi) {
            quickSort(buf, l, hi);
        }
    }

    /**
     * Sort the given array in-place in ascending order.
     * @param buf reference to the array
     */
    @SuppressWarnings("rawtypes")
    public static void quickSort(Comparable[] buf) {
        if (buf.length > 1) {
            quickSort(buf, 0, buf.length-1);
        }
    }

}

Wenn ich jetzt allerdings in der Klasse BorrowedBooks in der void sort() Methode folgendes Aufrufe:

Java:
Sort.quickSort(borrowedBooks);

- borrowedBooks ist das Array mit den Buch-Objekten..

Kommt folgende Fehlermeldung:

Code:
no suitable method found for quickSort(simplelibrary.Book[])
    method simplelibrary.util.Sort.quickSort(java.lang.Comparable[]) is not applicable
      (actual argument simplelibrary.Book[] cannot be converted to java.lang.Comparable[] by method invocation conversion)
    method simplelibrary.util.Sort.quickSort(java.lang.Comparable[],int,int) is not applicable
      (actual and formal argument lists differ in length)

Habe mir das Beispiel in der FAQ angesehen, aber konnte keinen Fehler feststellen. Mit "java.util.Array.sort(borrowedBooks)" kommt kein Fehler, aber wir sollen eben die quickSort Methode verwenden.

Bin für jede Hilfe dankbar!
 

puelo

Mitglied
Oha...
Das war ja mal mächtig dumm von mir...:lol:

Hatte wirklich eine eigene Comparable Klasse...

Vielen Dank.
 
Zuletzt bearbeitet:

puelo

Mitglied
Jetzt habe ich doch noch eine Frage.
Kann es sein, dass ich hier die quickSort Methode nur anweden darf, wenn das Array komplett gefüllt ist?

Weil wenn ich jetzt nur 3 Einträge in einem Array mit der Länge 20 anlege und dann die quickSort Methode anwende, dann gibt es eine NPE, weil

Compareable pivot = buf[(lo+hi) / 2]

würde ja dann auf das 9 bzw. 10 Objekt zeigen, welches aber "null" wäre, oder nicht?
 

bERt0r

Top Contributor
Wenn du ein int 20er Array anlegst und nur die ersten 3 Felder füllst sind die restlichen mit 0 belegt.
Java:
int [] arr=new int  [20];
arr [0]=1;
arr [1]=2;
arr [2]=3;
System.out.println(Arrays.toString(arr));
Das ist eine 0 kein null.
 

xehpuk

Top Contributor
Um nochmal auf die Frage zurückzukommen: Ja.

Passiert übrigens auch bei [JAPI]java.util.Arrays#sort(Object[])[/JAPI]. Dort gibts dann aber noch eine Methode, die einen Anfangs- und Endindex nimmt, sodass nur innerhalb dieser beiden Grenzen sortiert wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Java Quicksort PAP Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
M QuickSort und Liste Java Basics - Anfänger-Themen 6
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
L Quicksort verstehen Java Basics - Anfänger-Themen 3
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
Liondary Quicksort Java Basics - Anfänger-Themen 20
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
D Java Quicksort Java Basics - Anfänger-Themen 5
A Frage zu QuickSort Java Basics - Anfänger-Themen 9
B Quicksort mit Durchschnitt als Pivot Java Basics - Anfänger-Themen 1
K Quicksort Java Basics - Anfänger-Themen 3
M Quicksort - Probleme Java Basics - Anfänger-Themen 5
T QuickSort implementieren Java Basics - Anfänger-Themen 5
R QuickSort Verständis Problem (?) Java Basics - Anfänger-Themen 2
M Quicksort implementierung Java Basics - Anfänger-Themen 23
E Quicksort Java Basics - Anfänger-Themen 8
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
E QuickSort: Ergebniss speichern Java Basics - Anfänger-Themen 2
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
F Quicksort Java Basics - Anfänger-Themen 22
C Quicksort Invariante Java Basics - Anfänger-Themen 2
C QuickSort - Pivot in der Mitte Java Basics - Anfänger-Themen 5
P QuickSort iterativ Java Basics - Anfänger-Themen 5
K Eine Frage zum Quicksort Java Basics - Anfänger-Themen 11
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
B QuickSort - Fehler nicht zu finden Java Basics - Anfänger-Themen 2
W Quicksort Problem Java Basics - Anfänger-Themen 3
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
M Fehler in meinem Quicksort! Java Basics - Anfänger-Themen 21
B Quicksort Struktogramm Java Basics - Anfänger-Themen 9
G Frage zu Quicksort Java Basics - Anfänger-Themen 18
0 Quicksort bsp Java Basics - Anfänger-Themen 5
B Quicksort Problem Java Basics - Anfänger-Themen 6
S Mein Quicksort Problem: he method quickSort(int[], int, int) Java Basics - Anfänger-Themen 2
M Quicksort Java Basics - Anfänger-Themen 2
C Quicksort raten Java Basics - Anfänger-Themen 2
K ArrayList sortieren mit Quicksort Java Basics - Anfänger-Themen 3
M Quicksort Java Basics - Anfänger-Themen 4
J Quicksort programmieren Probleme Java Basics - Anfänger-Themen 9
S Quicksort Programm Java Basics - Anfänger-Themen 7
D Quicksort Java Basics - Anfänger-Themen 3
K Parameterübergabe bei quickSort Java Basics - Anfänger-Themen 6
S QuickSort will mir nicht in den Kopf (an einer Stelle) Java Basics - Anfänger-Themen 14
0 Quicksort Java Basics - Anfänger-Themen 2
M QuickSort Java Basics - Anfänger-Themen 4
J QuickSort - kurze Frage Java Basics - Anfänger-Themen 9
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
M Wie erreiche ich das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 2
M Wie erreiche ich es das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 0
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
A Java, verarbeitung eines xml-files Java Basics - Anfänger-Themen 2
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
C Überprüfen eines Programms auf Syntaxfehler Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben