Ein Getter bekommt eine anderen Type als er Return soll

J-Gallus

Mitglied
Moin Moin,
Ich sitze gerade an eine meiner Übungsaufgaben aus dem Buch un verstehe eine Kleinigkeit nicht. Den Code den ich hier hochstellen werde beschreibt eigentlich schon die gesamte Aufgabe.
Mein Problem bildet ich direkt bei der zweiten/ dritten Methode, den Gettern und Settern, die Variablen mit einem anderen Type zurückgeben sollen als sie bekommen.
Die vorhandenen Methoden sind vorgegeben und dürfen nicht verändert werden.

Dankeschön.
// und sollte ich das mit dem
Code:
 schon wieder verkackt haben, bitte ich um Berichtigung.


[code=Java]
package programming.set8.links;

public class LinkedElement<T> {

    private T value, link;

    public LinkedElement(T value) {
        this.value = value;
    }

    /**
    * Returns the value of the i-th linked element.
    *
    * @param i
    *            0-based index of the element whose value to return.
    * @return the i-th element's value, or {@code null}if there is no element
    *         with that index.
    */
    public T get(int i) {
   // Wie bekomme ich den Wert von Int i in meine schon deklarierte value oder eine andere Variable des types T?
        this.value=??
        return value;
    }

    /**
    * Sets the value of the i-th linked element to the given value. If there is
    * no i-th linked element, nothing happens.
    *
    * @param i
    *            0-based index of the element whose value to return.
    * @param newVal
    *            the new value to set.
    */
    public void set(int i, T newVal) {
        // Implement me!
    }

    /**
    * Returns the index of the first occurrence of a linked element carrying
    * the given value in the list.
    *
    * @param val
    *            the value to search for.
    * @return index where the value was found, or -1 if it's not in any of the
    *         linked elements.
    */
    public int firstIndexOf(T val) {
        // Implement me!
    }

    /**
    * Adds a new linked element holding the given value at the end of the
    * linked elements.
    *
    * @param newVal
    *            the new value.
    */
    public void add(T newVal) {
        // Implement me!
    }

    /**
    * 4 Removes the i-th element from the linked elements. If {@code i == 0},
    * this will effectively remove the head element. Thus, this method returns
    * the linked element that is the new head element.
    *
    * @param i
    *            index of the element to remove.
    * @return the new head element.
    */
    public LinkedElement<T> remove(int i) {
        // Implement me!
    }

}
 
// Wie bekomme ich den Wert von Int i in meine schon deklarierte value oder eine andere Variable des types T?

Gar nicht. (es sei denn T ist zur Laufzeit zufällig ein Integer)
Aber: Das ist doch auch überhaupt nicht gefragt. Lies dir doch den Kommentar zu der Methode noch einmal durch!

Abgesehen davon scheint der Typ von der Variable link falsch zu sein. War das so vorgegeben, oder ist das dein eigener Code?
 
Das hier ist noch ein kleiner Rest der Aufgabenstellung. Jetzt ist sie wirklich vollständig. Was meinst du mit gar nicht? Ich muss, für einen getter, doch irgendwie an den Wert der übergebenen variable kommen, die eben ein Integer ist, und sie dann per return zurück geben. Und dass muss eben über den Type T passieren. Aber schon mal danke für die Antwort.

Start by writing a class LinkedElement<T> in a package called programming.set8.links. T will be a placeholder for the data type of the value the element can hold. Add two private instance variables: one should hold the value the element holds, and the other should be a link to the next element, if any. Add a constructor that takes a parameter of type Tthat will become the value of the new linked element. Then, add the following methods:
 
Was meinst du mit gar nicht?
Ich glaube daran gibt es nicht so viel falsch zu verstehen, oder?
Ich muss, für einen getter, doch irgendwie an den Wert der übergebenen variable kommen, die eben ein Integer ist, und sie dann per return zurück geben.
Nein. Lies doch mal den Kommentar!
Add two private instance variables: one should hold the value the element holds, and the other should be a link to the next element, if any.
Dann verhält es sich so, wie ich im ersten Post gesagt hatte: Der Typ deiner Variablen link ist falsch!
 
link muss vom Typ LinkedElement<T> sein.
Mich verwirren die List-artigen set, get, add und firstIndex-Methoden, da ein LinkedElement doch nur ein weiteres LinkedELement kennt.
 
Dann müssten wir dem TE nur noch sagen, dass er den int Parameter getrost ignorieren kann, und immer nur link.value setzen oder zurückgeben muss.
 
Dann müssten wir dem TE nur noch sagen, dass er den int Parameter getrost ignorieren kann

Nein, der int Parameter hat die selbe Beudetung wie beim üblichen List-Interface. Was damit geschehen soll, steht auch im Kommentar der Methode. Deswegen ja schon mehrfach der Hinweis von mir, dass der TE eben diesen einfach mal lesen soll. 🙂
 
Schön, dass ihr schon ohne mich weiter gemacht habt. Habe mich nach mehreren Tagen wieder ran gesetzt. Habe es mir, wie du es gwünscht hast noch mal durchgelesen und meinen Fehler bemerkt. Der Interger der übergeben wird soll nicht der Wert des Elements sein, sonder die Stelle vom Index an dem das Element steht. Ich habe link umbenannt zu index und es mit dem type int versehen. Leider, muss ich gestehen, habe ich wohl bei dem Thema linkedlist geschlafen. Ich weiß nicht so richtig wie ich eine Linklist erstelle um dann zu sagen, das der getter auf den index und dessen Wert zugeifen soll. Das ganze war auch nicht so richtig eine Frage. Naja, ich schau mal was ich noch zu dem Thema nacharbeiten kann und wollte mich noc mal für deine Erklärungen bedanken.
 
Ich habe link umbenannt zu index und es mit dem type int versehen.

Das ist leider wieder falsch. Der Index wird nirgends gespeichert, sondern ist eine Art abgeleitetes Attribut, welches sich schlich daraus ergibt, an welcher Stelle in der "Liste" das jeweilige LinkedElement steht.

Schau dir deine Unterlagen zu verketteten Listen noch mal an, das wird das Hauptproblem sein. Die Aufgabe ist nicht schwierig. Es ist schon schwieriger Hilfestellungen zu geben, ohne gleich Lösungen zu verraten 🙂

Mal anschaulich:
Singly-linked-list.svg


Jeder dieser drei "Container" ist ein Object vom Typ LinkedElement. Jedes LinkedElement hat ein Feld, in dem ein Wert vorgehalten wird (12, 99, 37..) und ein weiteres Feld, welches wieder eine Referenz auf ein weiteres LinkedElement (oder sozusagen auf "den Rest der Liste") enthält.

Wie würdest du vorgehen, wenn du den Inhalt vom Element an der dritten Stelle (Also Index 2) haben willst, in deinem Code aber nur das erste LinkedElement (das mit dem Wert 12) kennst?
 

Zurück
Oben