Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Datenstruktur die 2. » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Datenstruktur die 2.
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
neuling96
unregistriert
Datenstruktur die 2. Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
public class Queue<E> {
 private int size;
 private Entry<E> firstEntry;
 private Entry<E> lastEntry; 
public Queue() {
 this.firstEntry = null;
 this.lastEntry = null;
}
public int size() { 
return this.size;
} 
}
public class Entry<E> {
 private E element; 
private Entry<E> next;
public Entry(E o, Entry<E> next) {
 this.element = o;
 this.next = next;
}
public E getElement() { 
return this.element;
}
public void setElement(E element) { 
this.element = element;
}
public Entry<E> getNext() {
 return this.next;
}
public void setNext(Entry<E> next) {
 this.next = next;
}
}

) Die Methode public E get() gibt das erste Element (d.h. das Element, das momentan von allen Elementen am langsten¨ in der Liste gespeichert wird) der Liste aus und loscht¨ dieses Element aus der
Liste.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public E get() {
Entry<E> currentEntry = this.firstEntry.getElement(); // hierweis unten 
if(currentEntry == null) {
throw new NullPointerException("empty queue");
} 
this.firstEntry = currentEntry.getNext();
 if(this.size == 1) {
this.lastEntry = null;
}
 this.size--;
return currentEntry.getElement(); 
}



eine weitere frage
ich hätte statt
Entry<E> currentEntry = this.firstEntry.getElement();

auch

Entry<E> currentEntry = this.firstEntry; schreiben können ,richtig??
23.01.2015 15:30
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Entry<E> currentEntry = this.firstEntry.getElement(); ist falsch, da Entry<E> nicht der selbe Typ ist, wie E.
Du musst also Entry<E> currentEntry = this.firstEntry; schreiben.

__________________
Syntax Highlighting fürs Board (Link)
23.01.2015 17:02 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

stimmt !!



(c) Die Methode public boolean contains(E element) gibt true zuruck,¨ wenn das gegebene Element element in der Liste vorhanden ist, ansonsten false. Die Elemente sollen dabei auf Gleichheit getestet werden.
1. vorschlag
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public boolean contains(E element) {
int i=0;
while(i<this.size) {
if(this.head.getElement().equals(element)) {
return true;
}this.head = this.head.getNext();
} 
return false;
 }

2. vorschlag
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public boolean contains(E element) {
 Entry<E> currentEntry = this.firstEntry;
while(currentEntry != null) {
if(currentEntry.getElement().equals(element)) {
return true;
}
 currentEntry = currentEntry.getNext();
}
 return false; }



beide stimmen ?
23.01.2015 21:38
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Der 2. sieht gut aus, der 1. ist furchtbar:
Hier wird this.head überschrieben und somit werden munter Einträge gelöscht, bis der gewünschte dabei ist. Eine Prüfung auf null findet auch nicht statt, sodass statt nie ein false zurückgegeben wird, sondern eine Exception geworfen.

__________________
Syntax Highlighting fürs Board (Link)
24.01.2015 08:28 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von eulerscheZahl

Eine Prüfung auf null findet auch nicht statt, sodass statt nie ein false zurückgegeben wird, sondern eine Exception geworfen.


genau hierzu eine frage

und zwar

im while (i<this.size) wird damit nicht erreicht, dass man null gar nicht prüft, da while schon voher abbricht??
24.01.2015 11:47
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Und wird irgendwo i erhöht oder beim Löschen (das nicht passieren sollte) this.size verringert? Nein!

__________________
Syntax Highlighting fürs Board (Link)
24.01.2015 11:54 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wie siehts damit aus?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public boolean contains(E element) {
int i=0;
Entry<E> currentEntry = this.firstEntry;
while(i<this.size) {
if(currentEntry.getElement().equals(element)) {
return true;
}
currentEntry = currentEntry.getNext();
i++;
} 
return false;
 }

24.01.2015 12:07
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Sieht gut aus.

Hier noch eine Alternative ohne den Schleifenzähler:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public boolean contains(E element) {
	Entry<E> currentEntry = this.firstEntry;
	while (currentEntry != null) {
		if (currentEntry.getElement().equals(element)) {
			return true;
		}
		currentEntry = currentEntry.getNext();
	}
	return false;
}


__________________
Syntax Highlighting fürs Board (Link)
24.01.2015 12:12 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Die Methode public void put(E element) hangt¨ das gegebene Element element an das Ende der
Liste an.

Das ist der Lösungsvorschlag, hierzu eine frage

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public void put(E element) {
Entry<E> entry = new Entry<E>(element, null) ;
if(this.size == 0) {
this.firstEntry = entry;
} else {
Entry<E> currentEntry = this.lastEntry;
 currentEntry.setNext(entry); //[B] was wenn th.lastEntry null ist?[/B]
} 
this.lastEntry = entry;
 this.size++; 
}
04.02.2015 15:18
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dann darfst du dich an einer NullPointerException erfreuen.
Dazu sollte es aber gar nicht erst kommen, da der Teil nur durchlaufen wird, wenn this.size > 0 ist. Somit gibt es auch einen lastEntry.

__________________
Syntax Highlighting fürs Board (Link)
04.02.2015 16:36 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

sagen wir this.size=1
this.firstEntry ungleich null aber this.lastEntry ist doch null?


dann würde man doch
folgendes ausführen

Entry<E> currentEntry = this.lastEntry;
currentEntry.setNext(entry);

und
NullPointerException erhalten?
04.02.2015 16:47
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Aber davor, als size noch 0 war, wurde das gemacht:
this.lastEntry = entry;

Du solltest dir wirklich angewöhnen, den Code vernünfitg zu formatieren:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public void put(E element) {
	Entry<E> entry = new Entry<E>(element, null);
	if (this.size == 0) {
		this.firstEntry = entry;
	} else {
		Entry<E> currentEntry = this.lastEntry;
		currentEntry.setNext(entry);
	}
	this.lastEntry = entry; //wird immer ausgeführt
	this.size++;
}


__________________
Syntax Highlighting fürs Board (Link)
04.02.2015 16:50 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

sry irgendwie verstehe ich es noch nicht

fangen wir langsam an
wenn this.size=1 ist, was ist dann this.lastEnty??
04.02.2015 17:01
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das, was beim vorherigen Aufruf von put erzeugt wurde.

__________________
Syntax Highlighting fürs Board (Link)
04.02.2015 17:03 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
neuling96
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wenn this.size=1 ist dann habe ich doch nur ein element
nämlich this.firstEnty ?

und wenn man noch this.lastEnty hätte, müsste dann nicht this.size 2 sein?? verwirrt
04.02.2015 17:08
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Datenstruktur die 2.