Generics Datentypen vergleichen

Hallo,

wir haben die Aufgabe eine verkette Liste selber zu implementieren, die auch Elemente vergleichen kann.

Aufgabenausschnitt:
Jedes Objekt der Klasse MyIntListElement stellt ein Listenelement dar. Ein Lis- tenelement enthält den zu speichernden Integer-Wert (value), sowie einen Verweis auf das nachfolgende Listenelement next. Die Methode getNext liefert den Verweis auf das nächste Element zurück, während die Methode setNext diesen modifiziert. Implementieren Sie die beiden folgenden Methoden:

(i) Die Methode compare erhält einen Verweis auf ein anderes Objekt vom Typ MyIntListElement und vergleicht value des aufgerufenen Objektes (this) mit dem des übergebenen Objektes. Sollten die beiden Werte übereinstimmen, so wird 0; sollte der Wert von this kleiner sein, so wird −1 und sonst 1 zurück- gegeben. (3 P.)


Ich verstehe nicht, wie ich das "andere Objekt" vom Typ MyIntListElement mit einem Integer Wert vergleichen kann. Ich kann ja kein Value Wert von dem "anderen Objekt aufrufen.

public class MyIntListElement<T> {

private int value;
protected T next;

public MyIntListElement(int value, T next){
this.value = value;
this.next = next;
}

public T getNext(){
return this.next;
}

public void setNext(T next){
this.next = next;
}

public int compare(T otherElement){ //HIER IST DAS PROBLEM
//TODO
if (otherElement==this.value)
return 0;
if (otherElement>this.value)
return -1;
if (otherElement<this.value)
return 1;
}
@Override
public String toString(){
//TODO

return "";
 

Thallius

Top Contributor
zunächst gibt es zwei Möglichkeiten.

1) das zu vergleichende Element liegt vor dem this Element oder
2) das Element liegt hinter den this Element.

Deshalb brauchst du zwei schleifen.

Die erste nimmt das übergeben Element und holt sich in einer Schleife immer das nächste mit Element.getNext() bis diese Element == this ist. Bist du am Ende der Liste (getNext() ist null) dann Must du this nehmen und in einer Schleife getNext() benutzen bis das Element == Element ist. Wenn du die beiden Elemente hast, dann kannst du deren Values einfach mit <>= vergleichen.

Gruß

Claus
 
Vielen Dank. Ich kann deine Überlegung absolut nachvollziehen, aber ich weiß nicht wie ich das implementieren soll. getNext nimmt ja Bezug auf die Übergabewerte, die man über den Konstruktor übergibt, wie kann ich dann das nächste Element von "otherElement" mit der Methode bekommen.

Außerdem ist mir unklar, was man nun wirklich in diese Variablen vom Typ "MyIntListElement"/ "T" schreibt, da es ja eig. kein Integerwert ist.
 

Meniskusschaden

Top Contributor
Ehrlich gesagt verstehe ich weder die Aufgabenstellung, noch die Erklärung von @Thallius. Zunächst zur Aufgabenstellung: Man legt sich fest, dass MyIntListElement Integerwerte speichern soll, programmiert es aber generisch. Ich erkenne den Sinn einfach nicht.

Zur Erklärung von @Thallius:
zunächst gibt es zwei Möglichkeiten.

1) das zu vergleichende Element liegt vor dem this Element oder
2) das Element liegt hinter den this Element.

Deshalb brauchst du zwei schleifen.

Die erste nimmt das übergeben Element und holt sich in einer Schleife immer das nächste mit Element.getNext() bis diese Element == this ist. Bist du am Ende der Liste (getNext() ist null) dann Must du this nehmen und in einer Schleife getNext() benutzen bis das Element == Element ist. Wenn du die beiden Elemente hast, dann kannst du deren Values einfach mit <>= vergleichen.
Folgender Satz der Aufgabenstellung bedeutet doch, dass die compare-Methode bereits beide Objekte kennt und dass beide vom Typ MyIntListElement sind. Warum soll man sie sich dann mit den Schleifen suchen, anstatt den Vergleich direkt durchzuführen?
(i) Die Methode compare erhält einen Verweis auf ein anderes Objekt vom Typ MyIntListElement und vergleicht value des aufgerufenen Objektes (this) mit dem des übergebenen Objektes.
Wahrscheinlich habe ich einfach gerade ein Brett vor'm Kopf. Ansonsten wäre es vielleicht doch besser, wenn @javaanfänger79 die gesamte Aufgabenstellung postet. Möglicherweise ist es dann aufschlußreicher.
 
Okay, hier einmal die komplette Aufgabe mit gesamten Code:

In dieser Aufgabe soll eine verkettete Listenstruktur entwickelt werden, in welcher die Listenelemente immer sortiert vorliegen. Zur Vereinfachung beschränken wir uns auf den primitiven Datentyp Integer. Nutzen Sie als Ausgangspunkt die zur Verfügung gestellten Klassen aus ueb03.zip. Entscheiden Sie sich für eine der Programmiersprachen (Java, C++) und ergänzen Sie die Implementierung an den entsprechenden Stellen wie folgt:

(a) Jedes Objekt der Klasse MyIntListElement stellt ein Listenelement dar. Ein Lis- tenelement enthält den zu speichernden Integer-Wert (value), sowie einen Verweis auf das nachfolgende Listenelement next. Die Methode getNext liefert den Verweis auf das nächste Element zurück, während die Methode setNext diesen modifiziert. Implementieren Sie die beiden folgenden Methoden:

(i) Die Methode compare erhält einen Verweis auf ein anderes Objekt vom Typ MyIntListElement und vergleicht value des aufgerufenen Objektes (this) mit dem des übergebenen Objektes. Sollten die beiden Werte übereinstimmen, so wird 0; sollte der Wert von this kleiner sein, so wird −1 und sonst 1 zurück- gegeben. (3 P.)

(ii) Die Methode toString gibt eine entsprechende Repräsentation des Objektes als String (bzw. std::string) zurück. (1 P.)

(b) Die eigentliche Verwaltung der Listenelemente vom Typ MyIntListElement wird von der Klasse MyIntOrderedList umgesetzt. Die Kopf der Liste wird durch den Verweis head auf ein Listenelement vom Typ MyIntListElement realisiert. Jede Liste ist anfangs leer d.h. head ist null1. Alle Elemente der Liste sollen dabei zu jeder Zeit aufsteigend sortiert sein. Implementieren Sie die folgenden Methoden:

(i) Die Methode printList gibt den Inhalt der Liste sinnvoll formatiert auf der Konsole aus. Dabei soll die zuvor implementierte toString-Methode der Klasse MyIntListElement verwendet werden. (2 P.)

page1image17224

1C++: NULL = ((void∗)0)

1

(ii) Die Methode addEntry fügt einen Integer-Wert value in die Liste aufsteigend sortiert ein. (4 P.)

(iii) Die Methode removeEntryAtPosition erhält einen Index pos übergeben und entfernt das entsprechende Listenelement aus der Liste. Index 0 entspricht somit dem Kopf der Liste. Achten Sie bei der C++-Implementierung darauf, dass der dynamisch allozierte Speicher wieder korrekt freigegeben wird. (4 P.)

Testen Sie Ihre Implementierung mittels der zur Verfügung gestellten Dateien Main.java bzw. main.cpp.


Java:
public class Main {
    public static void main(String[] args){
    
        MyIntOrderedList list = new MyIntOrderedList();
    
        int[] values = {29, 58, 1, 13, 32, 9, 76, 17};
    
        /**
         * test adding
         */
        for (int i = 0; i < values.length; i++){
            System.out.println("add " + values[i]);
            list.addEntry(values[i]);
            list.printList();
        }
     
        /**
         * test removing
         */      
        int[] pos = {2,6,5,2,100,0,1,0,0};
     
        for (int i = 0; i < pos.length; i++){
            System.out.println("remove pos " + pos[i]);
            list.removeEntryAtPosition(pos[i]);
            list.printList();
        }
    }
}
Java:
public class MyIntListElement {
 
    private int value;
    protected MyIntListElement next;
 
    public MyIntListElement(int value, MyIntListElement next){
        this.value = value;
        this.next = next;
    }
     
    public MyIntListElement getNext(){
        return this.next;
    }
 
    public void setNext(MyIntListElement next){
        this.next = next;
    }
 
    public int compare(MyIntListElement otherElement){
        //TODO
        return 0;
    }
 
    @Override
    public String toString(){
        //TODO
        return "";
    }
 
 
}


Java:
public class MyIntOrderedList {
 
    private MyIntListElement head = null;

    public MyIntOrderedList() {
    }
 
    public void addEntry(int value){
        //TODO      
    }
 
    public void removeEntryAtPosition(int pos){
       //TODO  
    }
 
    public void printList(){
        //TODO
    }
 
}
 
Zuletzt bearbeitet von einem Moderator:

mrBrown

Super-Moderator
Mitarbeiter
Zu deiner Frage, du kannst in compare auf this.value und otherElement.value zugreifen.

private heißt, es ist außerhalb deiner Klasse nicht sichtbar, du greifst aber innerhalb deiner Klasse darauf zu.
 

JStein52

Top Contributor
Wenn du deinen Code in Codetags schreibst würde man auch sehen dass in main nicht wie man denken könnte beim list.addEntry(...) ein Fehler ist sondern dass dort bei values die eckigen Klammern verloren geganden sind ;);) (beim remove genau so)
 
Ja auf den value Wert der in der Klasse steht, habe ich ja schon zugegriffen, aber "otherElement.value" ist ja nichts definiertes, da sagt der compiler ja einfach, nö mach ich nicht:D
 

Meniskusschaden

Top Contributor
In deinem ersten Posting ist otherElement vom generischen Typ T, in der vollständigen Aufgabenstellung aber vom Typ MyIntListElement. Vermutlich steht es bei dir noch auf T. In der Aufgabenstellung wird gar nicht gefordert, dass es generisch sein soll.
 

JStein52

Top Contributor
Da sagt der Compiler bei mir: "aber klar vergleiche ich dir this.value und otherElement.value"

Code:
public class MyIntListElement {

    private int value;
    protected MyIntListElement next;

    public MyIntListElement(int value, MyIntListElement next) {
        this.value = value;
        this.next = next;
    }

    public MyIntListElement getNext() {
        return this.next;
    }

    public void setNext(MyIntListElement next) {
        this.next = next;
    }

    public int compare(MyIntListElement otherElement) {
        if (this.value == otherElement.value) {
            return 0;
        }
        else // usw.
    }

    @Override
    public String toString() {
//TODO
        return "";
    }

}
 
Eine Frage habe ich noch. Wenn ich ein Element hinzufügen möchte, kann ich ja nicht den Wert so einfach übergeben, weil Value ja private ist. Ich kann ja nur den Konstruktor aufrufen, aber es macht doch keinen Sinn nur den Konstruktor aufzurufen.
 

mrBrown

Super-Moderator
Mitarbeiter
Warum macht das dMn keinen Sinn?

Konstruktoren sind doch genau für sowas da. "Schlechter" wäre es eher, wenn man sowohl Konstruktor als auch noch extra Setter aufrufen müsste, dann gäbe es zB den Fall, dass es ListenElemente ohne Wert gäben könnte, was in einer Liste wenig Sinn macht.
 
public class MyIntOrderedList {

private MyIntListElement head = null;
MyIntListElement helper;
public MyIntOrderedList() {

}

public void addEntry(int value){
Liste[0]=head;
if (head==null)
head = new MyIntListElement(value,null);
else
{
while (helper.getNext()!= null){
helper = helper.getNext();
}
helper.setNext(new MyIntListElement(value,null));

}

// MyIntListElement t=new MyIntListElement(value,);
//TODO
}

public void printList(){
//TODO

String [] name = new String[8];
String zahl = head.toString();
System.out.println("1.Element"+zahl);
System.out.println("2.Element"+head.getNext().toString());
}}


Ich bekomme immer eine Nullpointer Exception. Ich setze auch immer eine Null, aber ich weiß nicht, was ich verändern muss.
 

Meniskusschaden

Top Contributor
Du rufst helper.getNext() auf, ohne zu prüfen, ob die Variable helper ungleich null ist (wahrscheinlich ist sie null, denn du benutzt sie, ohne sie vorher zu initialisieren). Mich wundert aber, dass dein Programm überhaupt kompiliert, denn du verwendest ein Array Liste, ohne es zu deklarieren. Der Zweck des Arrays wird auch nicht deutlich.

Es wäre besser, wenn du zum Einfügen deiner Code-Ausschnitte code-Tags verwendest (z.B. über den Einfügen-Button).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben