Generische Liste

M

McLovin

Gast
gelöscht, sorry

So, danke das hat mir schon mal weitergeholfen!

Ich bekomme jetzt noch einen Fehler in der comparteTo Methode des ListElementes. Weiss da aber auch nicht woran es liegt. Tut mir leid wenn ich dumme Fragen stelle, aber ich habe noch mit Generics gearbeitet.

Java:
/**
 * Write a description of class SortedList here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */

import java.util.Comparator;

public class SortedList<T extends Comparable<T>>
{
    // toDO:
    //- Exception bei doppelt?
    private int size;
    private ListElement<T> first;
    private ListElement<T> last;

    /**
     * Constructor for objects of class SortedList
     */
    public SortedList()
    {
        this.size = 0;
        this.first = null;
        this.last = null;
    }

    public void addSorted(T data){
        ListElement<T> element = new ListElement<T>(data, null, null);
        
        if(first == null){
           // ListElement<T> element = new ListElement<T>(data, null, null);
            first = element;
            last = element;
            size++;
        }
        else{

            if(element.compareTo(first) == -1){
                //ListElement elementNeu = new ListElement(data, first, null);
                element.setNext(first);//--------
                first.setPrevious(element);
                first = element;
                size++;
            }else{
                if(element.compareTo(last) == 1){
                    //ListElement elementNeu = new ListElement(data, null, last);
                    element.setPrevious(last);
                    last.setNext(element);
                    last = element;
                    size++;
                }else{
                    ListElement<T> elementVG = first;

                    while( element.hasNext()){

                        if(element.compareTo(elementVG) == 0 ) 
                            break;
                        if( (element.compareTo(elementVG) == 1)   && (element.compareTo( elementVG.getNext()) == -1) ){
                            //ListElement elementNeu = new ListElement(data, element.getNext(), element);
                            element.setNext(elementVG.getNext());
                            element.setPrevious(elementVG);
                            elementVG.getNext().setPrevious(element);
                            elementVG.setNext(element);
                            size++;
                            break;
                        }
                        elementVG = elementVG.getNext();
                    }
                }
            }
        }
    }


    public void remove(T data){
        if(data.equals( first.getElementData() )){
            first.getNext().setPrevious(null);
            first = first.getNext();
            size--;
        }

        if(data.equals( last.getElementData() )){
            last.getPrevious().setNext(null);
            last = last.getPrevious();
            size--;
        }

        ListElement element = first.getNext();

        while( element.hasNext()){
            if(data.equals(element.getElementData()) ){
                element.getPrevious().setNext(element.getNext());
                element.getNext().setPrevious(element.getPrevious());
                element = null;
                size--;
                break;
            }
            
            element = element.getNext();
        }
    }
    
    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("Personen: \n \n");
        
        ListElement element = first;

        while( element.hasNext()){
            sb.append(element).append("\n");
            element = element.getNext();
        }
        sb.append(element);
        return sb.toString();
    }
}
    
    
    
    
    
    
class ListElement<T extends Comparable<T>>
{
    // instance variables - replace the example below with your own
    private T data;
    private ListElement<T> next;
    private ListElement<T> previous;

    /**
     * Constructor for objects of class ListElement
     */
    public ListElement(T data, ListElement next, ListElement previous)
    {
        this.data = data;
        this.next = next;
        this.previous = previous;
    }
    
    public T getElementData(){
        return data;
    }

    public int compareTo(ListElement<T> element) { 
        
        if (getElementData() < element.getElementData())
            return -1;
        else if (getElementData().equals(element.getElementData()))
            return 0;
        else
            return 1;

    }
    
    public boolean hasNext(){
        if(next != null)
            return true;
        return false;
    }
    
    public ListElement<T> getNext(){
        return next;
    }
    
    public ListElement<T> getPrevious(){
        return previous;
    }
    
    public void setNext(ListElement<T> element){
        this.next = element;
    }
    
    public void setPrevious(ListElement<T> previous){
        this.previous = previous;
    }
    
    public T toString(){
        return data;
    }
}

Die Fehlermeldung ist "operator < cannot be aplied to T,T"

Hat das vielleicht etwas damit zu tun, dass T auch ein Datentyp sein kann, der nicht verglichen (compareTo) werden kann?
 
M

McLovin

Gast
Hallo,

ich bin Anfänger im Programmieren und habe folgendes Problem. Beim Compilieren bekommen ich folgende Fehlermeldung:

type parameter TypeData is not within its bound

Java:
 public class SortedList<TypeData> 
{

    private int size;
    private ListElement<TypeData> first; // Hier meckert der Compiler
    private ListElement<TypeData> last;

    /**
     * Constructor for objects of class SortedList
     */
    public SortedList()
    {
        this.size = 0;
        this.first = null;
        this.last = null;
    }

    public void addSorted(TypeData data){
        ListElement<TypeData> element = new ListElement<TypeData>(data, null, null);
        
        if(first == null){
            first = element;
            last = element;
            size++;
        }
        else{

            if(element.compareTo(first) == -1){
                element.setNext(first);//--------
                first.setPrevious(element);
                first = element;
                size++;
            }else{
                if(element.compareTo(last) == 1){
                    //ListElement elementNeu = new ListElement(data, null, last);
                    element.setPrevious(last);
                    last.setNext(element);
                    last = element;
                    size++;
                }else{
                    ListElement<TypeData> elementVG = first;

                    while( element.hasNext()){

                        if(element.compareTo(elementVG) == 0 ) 
                            break;
                        if( (element.compareTo(elementVG) == 1)   && (element.compareTo( elementVG.getNext()) == -1) ){
                            element.setNext(elementVG.getNext());
                            element.setPrevious(elementVG);
                            elementVG.getNext().setPrevious(element);
                            elementVG.setNext(element);
                            size++;
                            break;
                        }
                        elementVG = elementVG.getNext();
                    }
                }
            }
        }
    }


    public void remove(TypeData data){
        if(data.equals( first.getElementData() )){
            first.getNext().setPrevious(null);
            first = first.getNext();
            size--;
        }

        if(data.equals( last.getElementData() )){
            last.getPrevious().setNext(null);
            last = last.getPrevious();
            size--;
        }

        ListElement element = first.getNext();

        while( element.hasNext()){
            if(data.equals(element.getElementData()) ){
                element.getPrevious().setNext(element.getNext());
                element.getNext().setPrevious(element.getPrevious());
                element = null;
                size--;
                break;
            }
            
            element = element.getNext();
        }
    }
    
    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("Personen: \n \n");
        
        ListElement element = first;

        while( element.hasNext()){
            sb.append(element).append("\n");
            element = element.getNext();
        }
        sb.append(element);
        return sb.toString();
    }
}
    
    
    
    
    
    
class ListElement<TypeData extends Comparable<TypeData>>
{
    // instance variables - replace the example below with your own
    private TypeData data;
    private ListElement<TypeData> next;
    private ListElement<TypeData> previous;

    /**
     * Constructor for objects of class ListElement
     */
    public ListElement(TypeData data, ListElement next, ListElement previous)
    {
        this.data = data;
        this.next = next;
        this.previous = previous;
    }
    
    public TypeData getElementData(){
        return data;
    }

    public int compareTo(ListElement<TypeData> element) { 
        
        if (getElementData() < element.getElementData())
            return -1;
        else if (getElementData().equals(element.getElementData()))
            return 0;
        else
            return 1;

    }
    
    public boolean hasNext(){
        if(next != null)
            return true;
        return false;
    }
    
    public ListElement<TypeData> getNext(){
        return next;
    }
    
    public ListElement<TypeData> getPrevious(){
        return previous;
    }
    
    public void setNext(ListElement<TypeData> element){
        this.next = element;
    }
    
    public void setPrevious(ListElement<TypeData> previous){
        this.previous = previous;
    }
    
    public TypeData toString(){
        return data;
    }
}

Die Aufgabe ist es eine sortierte doppelt verkettete List zu schreiben.

Danke im Vorraus!
 
S

SlaterB

Gast
generische Parameter solltest du nur dem Standard nach T, U, V usw. nennen, sonst verwechselt man das mit normalen Klassen/ Interfacen,
vielleicht noch alles Großbuchstaben, evtl. mit Unterstrich als Trenner, falls erlaubt, akzeptabel

in ListElement ist der Parameter eingeschränkt auf bestimmte Comparable-Klassen,
in SortedList dagegen nicht, so dass dort auch Klassen, die nicht Comparable sind, etwa SortedList selber, als Parameter genutzt werden könnten,
du musst dort schon "extends Comparable<TypeData>" wiederholt definieren
 

Landei

Top Contributor
Mal ein stilistischer Hinweis:

[c]addSorted[/c] und [c]remove[/c] sind viel zu lang und verschachtelt, sollten also in sinnvolle Einheiten zerlegt werden. Ich denke allerdings, dass sie vor allem deshalb so kompliziert sind, weil sie im falschen Kontext, nämlich [c]SortedList[/c] operieren. Du hast doch schon eine eigene Klasse [c]ListElement[/c], nur ist die wirklich strohdoof. Überlege dir also, welche Aufgaben du von den genannten Methoden besser nach [c]ListElement[/c] delegieren solltest. Du kannst dich z.B. viel leichter von [c]ListElement[/c] zu [c]ListElement[/c] hangeln, bis du die richtige Stelle zum Einfügen gefunden hast, als das von "außen" zu tun.
 
M

McLovin

Gast
Habs herausgefunden!

Java:
    public int compareTo(ListElement<T> element) { 

        return getElementData().compareTo(element.getElementData());

    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
L Generische Liste Java Basics - Anfänger-Themen 4
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
B Generische Methode Java Basics - Anfänger-Themen 2
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
J array über generische arraylist Java Basics - Anfänger-Themen 7
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
H Statische generische Methode Java Basics - Anfänger-Themen 2
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
D generische methode <T> void . Java Basics - Anfänger-Themen 9
J Generische Methoden Java Basics - Anfänger-Themen 6
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben