Rückgabewert von Kontruktoren

chillerStudent

Bekanntes Mitglied
Hallo,

ich habe eine Liste erstellt und möchte int Zahlen einfügen:

Java:
public class Knoten {
 
 private int key;
 private Knoten next;

 Knoten(int key) {
  this.key=key;
 }

 Knoten(int key, Knoten next) {
  this.key=key;
  this.next=next;
 }

}

Java:
public class List {

 Knoten head = null;
 public void insert(Knoten k) {
  head.setNext( new Knoten(k, head,getNext())); //Fehler: k wird als int Wert erwartet.
 }

}

Java:
public class Test {
 public static void main(String[] args) {
  List liste = new List();
  liste.insert(new Knoten(3)); //Parameter von insert soll nicht verändert werden!!
 }
}

Soweit ich weiß, gibt es keinen Rückgabewert eines Konstruktors. Wie kann ich dann trotzdem einen Kontruktor als Parameter nutzen?
 

javampir

Bekanntes Mitglied
hi,
wo ist denn dein problem?
Java:
insert(new Knoten(3))
müsste doch wunderbar funktionieren?
javampir
 

chillerStudent

Bekanntes Mitglied
Das Problem ist, dass er bei der Implementierung von der Methode insert beim ersten Parameter ein int wert erwartet. Also hier:

Java:
public void insert(Knoten k) { // k ist vom Typ Knoten
head.setNext( new Knoten(k, head.getNext())); // dieses k soll aber int sein

Wie geht das?
 

kaoZ

Top Contributor
indem du eine in der Klasse Knoten eine Methode anbietest die als Rückgabewert eine int zurückliefert, Konstruktoren haben keine Rückgabewerte!

Methoden hingegen haben immer einen Rückgabewert, auch wenn dieser void , also nichts ist .


Java:
class Knoten{


public int getValue(){
   return 13;
}

}

Fiktives Beispiel , nicht auf deinen Code bezogen !

dies liefert bei folgendem Aufruf z.B einen Wert des primitiven datentyps int

Java:
liste.insert(new Knoten().getValue()); // new Knoten().getValue() liefert in diesem Fall 13 (int)

/* und ist somit equivalent zu */

liste.insert(13);
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Gute Idee kaoZ, aber wie schaffe ich es mit
Java:
insert(new Knoten(3))
??

Was willst du denn "schaffen"? Was ist das Ziel deiner Insert-Methode? Ich vermute, entweder soll header zum next des übergeben Knotens gemacht werden oder umgekehrt:
Java:
public class List {
    Knoten head = null;
    public void insert(Knoten k) {
        head.setNext(k);
        // oder vielleicht k.setNext(header);
    }
}
Vorher solltest du head aber noch initialiseren.
Wenn du nur einen int zur Verfügung hast, ist es unerheblich, on du aus dem int vor dem Aufruf von insert einen Knoten machst oder im Methodenrumpf. Letzteres sähe dann so aus:
Java:
public class List {
    Knoten head = null;
    public void insert(int i) {
        Knoten k = new Knoten(i);
        head.setNext(k);
        // oder vielleicht k.setNext(header);
    }
}
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Würde ich so nicht sagen. Konstruktoren liefern halt nur immer einen Zeiger auf die "konstruierte" Instanz zurück.

Konstruktoren erstellen Objekte/Instanzen von Klassen, Variablen welche für diese angelegt werden ( in diesem Fall k ) verweisen/referenzieren auf das Objekt und dessen stelle im Speicher / Heap, inJava gibt es keine 'Zeiger' im eigentlichen Sinne wie man es aus C kennt.

Der 'Zeiger' wäre also in diesen Fall die Referenz, und nicht das erstellte Objekt selbst.

Java:
Knoten k = new Knoten(); 
/* k referenziert nun das erstellte Objekt und verweist somit auf die Stelle an der dieses Objekt erstellt wurde (Heap) */

Nichts des so trotz besitzt ein Konstruktor keinen in Java definierten Rückgabewert!

Wie nun aber Harry Kane schon geschrieben hatte ist nun die Frage, was genau du mit der insert Methoden bezwecken möchtest, und wozu du dieser außer des Knotens selbst auch noch den im Konstruktor definierten integer der Klasse Knoten übergeben möchtest.

Wenn du dadurch festlegen möchtest an welcher stelle deiner Liste sich der Knoten am ende befinden soll, versteh ich nicht so ganz was der key deiner Knotenobjekte damit zu tun haben soll :)
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Konstruktoren erstellen Objekte/Instanzen von Klassen, Variablen welche für diese angelegt werden ( in diesem Fall k ) verweisen/referenzieren auf das Objekt und dessen stelle im Speicher / Heap, inJava gibt es keine 'Zeiger' im eigentlichen Sinne wie man es aus C kennt.

Der 'Zeiger' wäre also in diesen Fall die Referenz, und nicht das erstellte Objekt selbst.

Auch wenn man den Zeiger in Java Referenz nennt, so bleibt er doch einfach nur ein Zeiger auf einen allozierten Speicherbereich der mit Daten gefüllt ist.

Gruß

Claus
 

kaoZ

Top Contributor
Richtig.

Letzten endes sollte dem TO nur klar sein das es sich nicht um das eigentliche Objekt handelt mit welchem er Arbeitet, sondern lediglich mit einer Referenz also einem Verweis auf den Seicherbereich (im Heap) welcher das Objekt enthält, bzw. wo dieses abgelegt worden ist.

Nennen kann man die Referenz letztlich wie man will, egal ob Zeiger, Verweis, Referenz oder oder oder.
 

chillerStudent

Bekanntes Mitglied
Ich möchte mit der Methode einen Knoten am Ende der Liste hinzufügen:

Java:
        Knoten head=null;
        Knoten tail=null;
	public void insert(Knoten k) {

		k=new Knoten(k.getKey());
		if(head==null) {
		        head=k;
		} else {
			tail.setNext(k); // Warum bekomme ich hier NullP.Ex. ? 
		} tail=k;
 
Zuletzt bearbeitet:

stg

Top Contributor
Nunja, zu Beginn ist
Code:
tail
nunmal
Code:
null
. Das musst du beim Einfügen auch berücksichtigen...
 

chillerStudent

Bekanntes Mitglied
Ist das hier richtig?

Java:
        Knoten head=null;
        Knoten tail=null;
        public void insert(Knoten k) {
            tail = k;
            k=new Knoten(k.getKey());
            if(head==null) {
                    head=k;
            } else {
                tail.setNext(k); 
            } tail=k;
Wenn ich nacheinander die Methode aufrufe, dann bekomme ich nicht das ganze Ergebnis:

Java:
Knoten list = new Knoten();
list.insert(new Knoten(4));
list.insert(new Knoten(1));
list.insert(new Knoten(5));

Ergebnis:
1
4

Ich möchte:
5
1
4
 
Zuletzt bearbeitet:

stg

Top Contributor
Ich würde vorschlagen, du malst dir einfach mal eine Skizze für die verschiedenen Fälle (Liste leer und Liste nicht leer), anhand derer du dir überlegst, wie du die "Zeiger" auf
Code:
head
und
Code:
tail
jeweils setzen musst.
 

stg

Top Contributor
Du hast in deiner Liste doch sowohl einen Verweis auf
Code:
head
, als auch einen auf
Code:
tail
gespeichert. Von der Namensgebung her gehe ich davon aus, dass der eine der erste und der andere der letzte besetze Knoten in der Liste sein soll...?!
Wenn du in eine leere Liste einfügst, dann sind beide natürlich zunächst
Code:
null
. Nach dem Einfügen ist dann genau ein Knoten in der Liste, also sollte in
Code:
head
und in
Code:
tail
jeweils der selbe Knoten gespeichert sein, nur, wenn mehr als ein Knoten in der Liste ist, dann sind
Code:
head
und
Code:
tail
wirklich verschieden.
Wie gesagt, mal dir mal eine Skizze, damit es direkt vor Augen siehst, wann du welchen Zeiger umbiegen musst und welchen nicht. Deine bisherigen Versuche sehen für mich mehr danach aus, dass du einfach versuchst richtig zu raten...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
B Rückgabewert boolean Java Basics - Anfänger-Themen 8
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
L Methoden Rückgabewert Verbergen / nicht mit ausgeben Java Basics - Anfänger-Themen 4
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
F Pascalsches Dreieck mit Rückgabewert Java Basics - Anfänger-Themen 2
D Dezimal zu Dual mit Rückgabewert Java Basics - Anfänger-Themen 39
Curtis_MC Methoden Rückgabewert von BiPredicate Java Basics - Anfänger-Themen 6
B Array als Rückgabewert in der Methode Java Basics - Anfänger-Themen 1
T Rückgabewert Problem Java Basics - Anfänger-Themen 2
A Methoden Rückgabewert Java Basics - Anfänger-Themen 6
I Referenz auf Klasse als Rückgabewert Java Basics - Anfänger-Themen 7
H Variablen Void und der Rückgabewert Java Basics - Anfänger-Themen 6
P Rückgabewert bestimmen Java Basics - Anfänger-Themen 17
J Warum wird Array durch Methode ohne Rückgabewert verändert? Java Basics - Anfänger-Themen 5
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
D for-Schleife Rückgabewert Java Basics - Anfänger-Themen 6
M Rückgabewert bei Methoden Java Basics - Anfänger-Themen 6
S Methoden Bei Liste als Rückgabewert: IndexOutOfBoundsException Java Basics - Anfänger-Themen 1
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
O Was verursacht den Rückgabewert false bei der Methode ready() eines BufferedReaders Java Basics - Anfänger-Themen 9
K Methode ohne Rückgabewert in boolean Methode ändern Java Basics - Anfänger-Themen 6
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
S Rückgabewert null in Methode mit Thread Java Basics - Anfänger-Themen 2
M Anstatt 1 int Rückgabewert, mehrere Rückgaben mit Arraylist Java Basics - Anfänger-Themen 8
N Klassen constructor Rückgabewert Java Basics - Anfänger-Themen 10
C Methoden Rückgabewert von statischer Methode ignorieren Java Basics - Anfänger-Themen 8
MiMa Methode mit Rückgabewert Java Basics - Anfänger-Themen 2
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
T Variablen Rückgabewert aus einer Schleifen-Methode Java Basics - Anfänger-Themen 8
D Methode mit Rückgabewert Java Basics - Anfänger-Themen 5
K Rückgabewert einer Klassenmethode Java Basics - Anfänger-Themen 7
J Methoden mit und ohne Rückgabewert Java Basics - Anfänger-Themen 22
D Erste Schritte Als Rückgabewert Klasse Java Basics - Anfänger-Themen 5
D Rückgabewert Pixelgrabber Java Basics - Anfänger-Themen 3
S ArrayList und Rückgabewert Java Basics - Anfänger-Themen 2
T Methode - Rückgabewert Schreibweise Java Basics - Anfänger-Themen 6
S Interface Rückgabewert Java Basics - Anfänger-Themen 3
F if Anweisung mit Rückgabewert? Java Basics - Anfänger-Themen 4
I Rückgabewert von JSlider Java Basics - Anfänger-Themen 15
B Methoden, Rückgabewert und Verknüpfungen Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Rückgabewert Java Basics - Anfänger-Themen 15
C Datentypen Rückgabewert von "new FileInputStream" Java Basics - Anfänger-Themen 4
S Datentypen String mit fester Länge (Rückgabewert einer Methode) Java Basics - Anfänger-Themen 2
O Rückgabewert mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 10
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
T Array als Rückgabewert einer Methode Java Basics - Anfänger-Themen 3
A Rückgabewert ändert sich? Java Basics - Anfänger-Themen 9
C Thread mit Rückgabewert? Java Basics - Anfänger-Themen 4
S Rückgabewert einer Instanzvariable Java Basics - Anfänger-Themen 2
K rückgabewert combobox Java Basics - Anfänger-Themen 15
M Methoden mit Rückgabewert Java Basics - Anfänger-Themen 4
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
C Null als Rückgabewert Java Basics - Anfänger-Themen 7
O String[] Array als Rückgabewert Java Basics - Anfänger-Themen 7
G setValueAt Rückgabewert verarbeiten? Java Basics - Anfänger-Themen 12
P Methode mit 2 unterschiedlichem Rückgabewert Java Basics - Anfänger-Themen 10
L Prozess rückgabewert? Java Basics - Anfänger-Themen 5
I "Rückgabewert" von EditorFenster Java Basics - Anfänger-Themen 6
A ActionPerformed Methode ohne Rückgabewert Java Basics - Anfänger-Themen 12
G Rückgabewert bei JInternalFrame ? Java Basics - Anfänger-Themen 2
M Rückgabewert Java Basics - Anfänger-Themen 4
L Rückgabewert Java Basics - Anfänger-Themen 7
K Frage zu Rückgabewert List und ArrayList Java Basics - Anfänger-Themen 6
D Methode aufrufen funktioniert nicht ganz - Rückgabewert Bool Java Basics - Anfänger-Themen 12
M Rückgabewert einer Methode Java Basics - Anfänger-Themen 6
P Array als Rückgabewert Java Basics - Anfänger-Themen 4
halla Array an Methode übergeben / Array als Rückgabewert Java Basics - Anfänger-Themen 2
L Rückgabewert in Konstruktor? Java Basics - Anfänger-Themen 4
R Problem mit Rückgabewert Java Basics - Anfänger-Themen 5
M Null-Rückgabewert von Methoden = sauberes programmieren? Java Basics - Anfänger-Themen 3
D Rückgabewert einer Methode Java Basics - Anfänger-Themen 25
M JFileChooser Rückgabewert Java Basics - Anfänger-Themen 2
Niki_Tesla Rückgabewert Java Basics - Anfänger-Themen 2
A Hashtable als Rückgabewert Java Basics - Anfänger-Themen 3
A Methode mit Rückgabewert Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben