Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Testfälle für 4.4
mein Vorschlag. Oder fehlt da etwas?
public class MergeTest {
public static void main(String[] args){
int[] ns = {1,2,5,5,4};
int[] ns1 = {1,1,2,3,4,4};
int[] ns2 = {5,5,5,6,0,0,5,5};
int[] ns3 = {1};
int[] ns4 = {};
int[] ns5 = {5,5};
int[] ns6 = {1,1,1,1,1,1};
int[] ns7 = {2,2,2};
int[] ns8 = {-5,-5};
String a = Merge.merge(ns,0);
String b = Merge.merge(ns1,0);
String c = Merge.merge(ns2,0);
String d = Merge.merge(ns3,0);
String e = Merge.merge(ns4,0);
String f = Merge.merge(ns5,0);
String g = Merge.merge(ns6,0);
String i = Merge.merge(ns7,0);
String j = Merge.merge(ns8,0);
System.out.println(a.equals("1 2 10 4");
System.out.println(b.equals("2 2 3 8");
System.out.println(c.equals("10 5 6 0 10");
System.out.println(d.equals("1");
System.out.println(f.equals("10");
System.out.println(g.equals("2 2 2");
System.out.println(i.equals("4 2");
System.out.println(j.equals("-10");
}
}
Tipp: Der Quelltextbereich wird mit
[m]code=Java[/m]
etwas lesbarer
Testfälle
Ich habe e.equals noch hinzugefügt,hattest du wahrscheinlich vergessen ;).
Außerdem hab ich noch drei Testfälle, die nicht bei 0 Anfangen, eingefügt.
Bei denen bin ich mir aber nicht sehr sicher, ob ab dem Punkt was merge durchläuft der array ausgegeben werden soll(so hab ich die Tests gemacht) oder auch der übersprungene Teil + der gemergte.
public class MergeTest {
public static void main(String[] args){
int[] ns = {1,2,5,5,4};
int[] ns1 = {1,1,2,3,4,4};
int[] ns2 = {5,5,5,6,0,0,5,5};
int[] ns3 = {1};
int[] ns4 = {};
int[] ns5 = {5,5};
int[] ns6 = {1,1,1,1,1,1};
int[] ns7 = {2,2,2};
int[] ns8 = {-5,-5};
int[] ns9 = {1,1,2,3,4,4};
int[] ns10 = {5,5,5,6,0,0,5,5};
int[] ns11 = {1,1,1,1,1,1};
int[] ns12 = {1,1,1,1,1,1};
String a = Merge.merge(ns,0);
String b = Merge.merge(ns1,0);
String c = Merge.merge(ns2,0);
String d = Merge.merge(ns3,0);
String e = Merge.merge(ns4,0);
String f = Merge.merge(ns5,0);
String g = Merge.merge(ns6,0);
String i = Merge.merge(ns7,0);
String j = Merge.merge(ns8,0);
String k = Merge.merge(ns1,4);
String l = Merge.merge(ns2,5);
String m = Merge.merge(ns6,2);
String k = Merge.merge(ns9,4);
String l = Merge.merge(ns10,5);
String m = Merge.merge(ns11,2);
String n = Merge.merge(ns12,8);
String nil = Merge.merge(null,42);
System.out.println((a.equals("1 2 10 4")) ? "true" : "false");
System.out.println((b.equals("2 2 3 8")) ? "true" : "false");
System.out.println((c.equals("10 5 6 0 10")) ? "true" : "false");
System.out.println((d.equals("1")) ? "true" : "false");
System.out.println((e.equals("")) ? "true" : "false");
System.out.println((f.equals("10")) ? "true" : "false");
System.out.println((g.equals("2 2 2")) ? "true" : "false");
System.out.println((i.equals("4 2")) ? "true" : "false");
System.out.println((j.equals("-10")) ? "true" : "false");
System.out.println((k.equals("8")) ? "true" : "false");
System.out.println((l.equals("0 10")) ? "true" : "false");
System.out.println((m.equals("2 2")) ? "true" : "false");
System.out.println((n.equals("")) ? "true" : "false");
System.out.println((nil.equals("")) ? "true" : "false");
}
}
E: Testfall für i > array Länge eingefügt
E2: Testfall für null array eingefügt
Ich bin davon ausgegangen, dass das gesamte Array ausgegeben werden soll, unabhaengig des Startpunktes fuers Merge. Es waere wirklich hilfreich,wenn ein Tutor/Aufgabensteller genaueres dazu angeben kann
Die Meinung der Totoren/Aufgabensteller würde mich auch interessieren.
Ich habe diese Aufgabe so gelöst das ich keine weiteren Arrays anlege, sondern den String zusammenbaue/erweitere. Das heisst, sollten wie von fefe vorgeschlagen,
String k = Merge.merge(ns1,4); //ns1 wurde schon einmal gemerged
String l = Merge.merge(ns2,5); //ns2 wurde schon einmal gemerged
String m = Merge.merge(ns6,2); //ns6 wurde schon einmal gemerged
ein array wieder verwendet werden, wird die Ausgabe nicht mehr korrekt sein, da das wiederverwendte Array, zwar die verschmolzene Stellen hat, aber da es nicht neuangelegt wurde ist die Länge gleich geblieben.
Sollte man allerdings immer neue Arrays verwendet liefert die Ausgabe genau, dass was sie soll.
Was nun ?!
Das ist eine wirklich gute Frage… ich selbst hab immer ein neues Array angelegt, schrecklich ineffizient, aber ohne weitere Angaben vermutlich die sicherste Loesung :-p
Nur mal so rein interessehalber: Wird eigentlich ueberprueft, ob die Funktionen auch rekursiv programmiert sind?
Wird es, ja.
Statt „System.out.println(a.equals(„1 2 10 4“) ? true : false);“ sollte man besser System.out.println(a.equals(„1 2 10 4“)); schreiben. Wenn das true ist, wird dann auch true ausgegeben, wenn false, wird false ausgegeben.
fast
Jetzt noch die Code-Umgebung verwenden. D.h. das code=Java muss von umschlossen sein und den Block entsprechend wieder geschlossen werden mit /code (ebenfalls mit umschlossen).
Einfach mal bei bor1s zweitem Beitrag auf Zitieren klicken und da nachschauen.
ja habs geschafft proud
ich denk ich werde morgen mal jemanden Fragen wie das genau gemeint ist, weil für 8 Punkte im Vergleich zur anderen Gruppenaufgabe wär der Aufwand für die Aufgabe dann sehr hoch.
Das Array soll beginnend mit dem angegebenen Index bearbeitet und auch erst ab dort zurückgegeben werden.
Ich denke, ein Testfall wäre noch nützlich im Sinne von:
int[] ns12 = {1,1,1,1,1,1};
String q = Merge.merge(ns12,8);
System.out.println(q.equals(“”));
Ich würde auch noch einen Test vorschlagen, und zwar den Test mit [m]null[/m], denn auch dann stehen ja ab dem Index [m]i[/m] keine Zahlen mehr zur Verfügung, um mal die Angabe zu zitieren.
String nil = Merge.merge(null, 42);
System.out.println(nil.equals(""));
Ob wir bereits so weit sind, dass solche Fälle geprüft werden, weiß ich zwar nicht, aber auf Nummer Sicher gehen ist immer gut
Also deinen Testfall Sergeant Angua hab ich natürlich eingebaut, sehr gute Idee.
Vielen Dank dafür (habs im Code Beitrag geändert)
Zu kissen also klar das könnte man abfragen, aber ich glaube ehrlich gesagt nicht daran.
Zum einen, da der besondere Wert null noch nicht in der Vorlesung explizit behandelt worden ist.
Zum anderen, so viele Punkte gibts auf die Aufgabe auch nicht.
Außerdem wüsste ich auch grad nicht wie man das bei einem Array abfragt.
E:
Klingt für mich nicht nach einem null Array.
int[] array = null;
if (array == null)
System.out.println("null");
Danke für die Testfälle!
Ich hab nur das Problem, dass mein letztes Zeichen immer ein Leerzeichen ist und daher nicht ein “pass” bekommen.
Führende und nachfolgende Leerzeichen kann man mit .trim() abschneiden. Nur zwischen zwei Zahlen muss immer ein Leerzeichen stehen. Bei der Bewertung spielen die führenden und nachfolgenden Leerzeichen keine Rolle.
Ich weiß genau da auch nicht weiter?
Wenn man zb den Test, der in Merge.java schon eingebaut ist, einfach kopiert, sodass er 2 mal ausgeführt wird, dann bekommt man 2 verschiedene Ergebenisse…
Mn kann das schon umgehen,aber das legt voraus, dass man versteht, was der Unterschied zwischen diesen beiden Operationen ist:
int [] abc= {1,5,52,24};
int [] xyz= abc;
//ist nicht das selbe wie
int a=5;
int b=a;
aber ist das jetzt verlangt oder nicht ?