Hausübung 10

Mira`
Mausschubser
Mausschubser
Beiträge: 92
Registriert: 27. Okt 2006 20:41

Beitrag von Mira` »

Habt ihr in der Oberstufe schon C++ gemacht?

Wir durften nur Pascal und ein bissel Assembler programmieren.

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Ja haben wir,

Wobei, nach der 11 konnte ich schon mehr als der Lehrer :D

Als ich das 2. mal die 13 gemacht habe :roll:
bestand meine Zeit eigentlich nur eigene Projekte zu machen
oder Fehler der Lehrers zu korrigieren .... ach wie ich das vermisse :cry:


Soviel wie ich gehört habe, ist er nun auf C# umgestiegen :D

Benutzeravatar
Red*Star
Kernelcompilierer
Kernelcompilierer
Beiträge: 510
Registriert: 28. Nov 2006 19:40

Beitrag von Red*Star »

Diese Generics bringen mich noch auf die Palme...

Ich hab jetzt drei verschiedene Varianten probiert, und immer hat der Compiler etwas zu meckern: In Aufgabe 2.ii steht ja, wir sollen nur die bereits definierten Funktionen benutzen, um insertionSort zu implementieren... okay, dachte ich mir, in Scheme ein Einzeiler, in Java kann es nicht so viel schlimmer sein... naja, Irren ist ja bekanntlich menschlich. Also, mal abgesehen davon, dass es, wenn man insertionSort from scratch rekursiv programmiert, wesentlich kürzer (nur vier Zeilen lang) wird, wer kann mir hier helfen:

Code: Alles auswählen

// (inner...)
class insertFunction<X> implements BinaryFunction
{
	BinaryFunction<Boolean, X, X> co;

	insertFunction(BinaryFunction<Boolean, X, X> compareOp)
	{
		this.co = compareOp;
	}

	public Cons<X> apply(X op1, Cons<X> op2)
	{
		return ConsFunctions.<X>insert(op1, op2, co);
	}
}

return ConsFunctions.<X, Cons<X>>fold(Cons.<X>getEmptyCons(), new insertFunction<X>(compareOp), lst);
"The type insertFunction<X> must implement the inherited abstract method BinaryFunction.apply(Object, Object)"
sagt mir der Compiler.
Aber ich /hab/ apply doch implementiert...


Wenn ich nämlich die andere Variante nehme (anonymous classes, so wie auch in den PublicTest-Beispielen):

Code: Alles auswählen

return ConsFunctions.<X, Cons<X>>fold(Cons.<X>getEmptyCons(),
				new BinaryFunction< Cons<X>, X, Cons<X> >()
				{
					public Cons<X> apply(X op1, Cons<X> op2)
					{
						return ConsFunctions.<X>insert(op1, op2, compareOp);
					}
				}
, lst);

dann tritt der Fehler seltsamerweise nicht auf.

(Dafür habe ich dann aber das Problem, dass ich compareOp nicht benutzen kann, weil das logischerweise in der inneren Klasse nicht zu sehen ist.)

citta
Mausschubser
Mausschubser
Beiträge: 96
Registriert: 7. Nov 2006 21:52

Beitrag von citta »

Wenn du BinaryFunction implementierst, musst du es auch Typen übergeben, damit es typsicher ist und apply "passt".

Benutzeravatar
Red*Star
Kernelcompilierer
Kernelcompilierer
Beiträge: 510
Registriert: 28. Nov 2006 19:40

Beitrag von Red*Star »

Oh je... ich hab's doch noch geschafft... der Code ist jetzt ca. 16 Zeilen lang... also das Vierfache von dem, was ich *eigentlich* gerne geschrieben hätte:

Code: Alles auswählen

if ( lst.isEmpty() )
	return lst;
else
	return insert(lst.getFirst(), insertionSort(lst.getRest(), compareOp), compareOp);
Aber egal, Hauptsache, diese idiotische insertionSort-Aufgabe ist endlich fertig...

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Beitrag von banshee »

sammal kann mir mal jemand verraten wie diese behinderten lists aus dem util ding da funktionieren sollen?

ich will in der constructFromList ganz einfach immer das erste element der list eintragen und die funktion dann mit der list ohne das erste element rekursiv aufrufen. nur ich krieg dauernd indexOutOfBoundsException. aber hauptsache drunter steht Index: 1 Size: 1, wo is das problem oO

noch nicht ma das geht:

Code: Alles auswählen

List<X> a = list.subList(2, list.size());
		
		return new Cons<X>(a.get(1), null);
/edit: nochmal ne andere frage: wie kann ich denn im debugger ausdrücke überwachen? zb wenn ich rausfinden will was bei list.size() rauskommt. bei visualstudio muss ich das nur markieren und die maus drüber halten aber kp wie das bei java gehen soll...

Benutzeravatar
m0ep
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 189
Registriert: 5. Okt 2006 22:52
Wohnort: Bensheim
Kontaktdaten:

Beitrag von m0ep »

Informatiker fangen bei 0 an zu zählen :roll:


wenn size = 1 ist musst du bei index = 0 auslesen

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Beitrag von banshee »

argh...ich hab wohl irgendwie bei diesen bedingungen da <= 0 gelesen -.-

is doch immer wieder schön wie man stunden seines lebens in den wind schießen kann...

aber trotzdem danke :D

Antworten

Zurück zu „Archiv“