Seite 1 von 1

Codemonkey Übungen Lösungen

Verfasst: 10. Mai 2017 18:34
von Dome2403
Hallo

gibt es irgendwo Lösungsvorschläge für die Codemonkey Übungen? Sitze bereits seit 2h an einer Aufgabe und komme einfach nicht weiter... so kann ich mich leider nicht wirklich auf das Testat vorbereiten. Wenn ich anhand der Lösung nachvollziehen könnte was ich falsch mache wäre mir damit mehr geholfen als dass ich jetzt verzweifelt die Aufgabe abbreche, weil ich einfach schon zu viel Zeit in diese investiert habe.

Liebe Grüße
Dominic

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 07:38
von Prof. Karsten Weihe
Posten Sie doch Ihre bisherige Lösung hier!

KW

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 12:40
von Dome2403
hab versucht es so in etwa zu lösen was meiner Logik nach funktionieren sollte. JUnit läuft auch durch, nur bestehe ich die Tests nicht.



public Listobject<T>[] executeInsertElementInArray(Listobject<T> element, int pos)
{
Listobject<T>[] newArray = new Listobject[getArray().length + 1];
newArray[pos] = element;
int indexCount = 0;

for(int i=0;i<getArray().length;i++){
if(newArray[indexCount] == null){
newArray[indexCount]=getArray();
indexCount++;
}else{
newArray[indexCount+1]=getArray();
indexCount = indexCount+2;
}

}

return newArray;
}

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 12:42
von Julian Prommer
Welche Tests?

Alle?

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 12:51
von Julian Prommer
Genau eine Zeile mag der Parser nicht.
Was nicht einmal zum Compiler kommt wird schon mal gar nicht getestet!

Studieren Sie die Ausgabe des Parser!

Korrigieren Sie den Fehler!
Dann wird es wenigstens Compilieren, aber viele Tests werden Sie bestehen damit.

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 12:53
von Dome2403
habe es etwas verändert jetzt bestehe ich immerhin 1 von 11 Tests, weiter komme ich aber dennoch nicht.


public Listobject<T>[] executeInsertElementInArray(Listobject<T> element, int pos)
{
Listobject<T>[] newArray = new Listobject[getArray().length + 1];
int indexCount = 0;

for(int i=0;i<getArray().length;i++){
if(i==pos){
newArray=element;
newArray[i+1]=getArray();
indexCount=indexCount+2;
}
else{
newArray[indexCount]=getArray();
indexCount++;
}

}

return newArray;
}

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 13:17
von Dome2403
Meine eigentliche Frage wurde auch nicht beantwortet, nämlich ob es Lösungen zu den Aufgaben gibt? Weil für jemanden wie mich(kenne erst seit 6 Monaten Java und da auch nur die Basics aus Fop) dauert es mindestens 1,5h ++ um selbst auf die richtigen Lösungen zu kommen, wenn ich es überhaupt schaffe. Da im Testat 1 Aufgaben aus bis zu 41 (wenn ich richtig gezählt habe) verschiedenen Implementierungen dran kommen können und ich gerne wenigstens 1x alle verstehen möchte um sie dann selbst zu implementieren, ist es mir ohne Lösungsvorschläge, alleine vom Zeitaufwand, nicht möglich mich entsprechend auf das Testat vorzubereiten.

Grüße
Dominic

Re: Codemonkey Übungen Lösungen

Verfasst: 11. Mai 2017 14:02
von Dome2403
und hier meine finale Lösung nach sage und schreibe 1:45h rumbasteln und rumprobieren.. mit dieser Lösung schaffe ich immerhin 2 der 11 Junit Tests
an dieser Stelle beende ich nun frustriert diese Aufgabe und versuche mich an der nächsten.
{
Listobject<T>[] newArray = new Listobject[getArray().length + 1];
newArray=getArray();

if(pos == newArray.length-1){
newArray[pos]=element;
setArray(newArray);
return getArray();
}
if(newArray[pos] == null){
newArray[pos] = element;
setArray(newArray);
return getArray();
}else{

for(int i=newArray.length-1;i>=pos;i--){
newArray = newArray[i-1];
}

newArray[pos] = element;

setArray(newArray);

return getArray();}
}

Re: Codemonkey Übungen Lösungen

Verfasst: 13. Mai 2017 12:05
von hallo6
Hallo Dome2403,

du erstellst in der ersten Zeile ein neues Array, welches ein Element größer ist, als das existierende. Das brauchst du ja auch, um ein Element einzufügen. In der nächsten Zeile überschreibst du dies jedoch mit dem bisherigen Array. An sich eine nette Idee, die aber leider nicht so funktioniert! Die erste Zeile erstellt ein neues Objekt im Speicher (Arrays sind Objekte -> Referenzadresse in Variable gespeichert), sodass "newArray" auf diese Speicherstelle zeigt. Der Aufruf in der zweiten Zeile jedoch setzt die Adresse auf die des bisherigen Arrays und dein erstelltes Array geht verloren. Folglich liegt in "newArray" nur eine Referenz auf "getArray()".
Du musst die einzelnen Arrayelemente kopieren um den gewünschten Effekt zu erzielen.

Hier ein Programm in Pseudo-Code, das dir vielleicht hilft:
Erstelle neues Array mit Länge +1;
Solange getArray() Elemente hat mache:
Teste, ob position die ist, an der das Element eingefügt werden soll
ja:
füge neues element in neues array ein;
füge dahinter noch das eigentliche Element aus getArray() ein;
nein:
kopiere das eigentliche element ins neue Array;
Hier noch testen, ob Element nach ganz hinten soll (die Schleife hätte es nicht eingefügt) und eventuell einfügen;
neues Array speichern (setArray());
neues Array zurückgeben;
Für die Realisierung benötigst du eine zusätzliche Zählvariable für das neue Array, da der Index darin nach Einfügen des neuen Elements stets Eins vor dem alten Array ist.

Villeicht konnte ich dir ja helfen...

Re: Codemonkey Übungen Lösungen

Verfasst: 13. Mai 2017 14:04
von Vykyfikation
Schau mal in dem Thread "Lösungen zu Array" rein, dort habe ich eine Lösung gepostet, die funktioniert :)

Re: Codemonkey Übungen Lösungen

Verfasst: 13. Mai 2017 14:11
von hallo6
Ich glaube er hat Probleme beim insert mit Position und nicht über den Comparator :wink: