[Codemonkeys] Iterativ -> Palindrom

Bei Postings zu Aufgabe Nr. x = 1..4 lassen Sie Ihr Betreff bitte mit "x: " beginnen, gefolgt von einer möglichst präzisen Überschrift, danke!

Moderator: Algorithmen und Datenstrukturen

Forumsregeln
Bei Postings zu Aufgabe Nr. x = 1..4 lassen Sie Ihr Betreff bitte mit "x: " beginnen, gefolgt von einer möglichst präzisen Überschrift, danke!
Timooo
Neuling
Neuling
Beiträge: 3
Registriert: 5. Mai 2017 20:23

[Codemonkeys] Iterativ -> Palindrom

Beitrag von Timooo »

Hallo zusammen,

ich habe ein kleines Problem mit den Aufgaben Codemonkey -> Iterativ -> "Check for palindrome" und "Check for palindrome in arrays of String".
Soweit ich das in Eclipse beurteilen kann, macht mein Code in beiden Aufgaben, genau das was er soll. Nur wenn ich ihn auswerten lasse, bekomme ich z.B. in "Check for palindrome in arrays of String" folgende 2 Fehler:

Code: Alles auswählen

Antwort des Servers
Junitreport

    Time – 6

    Testcount – 6

    Failurecount – 2

    Ignorerecount – 0

Failurereport

    Testheadder – staticTest_isPalindrome_upplercase_lowercase(math.tests_palinDromeArray.PalindromeArray_Test)

    Message – At least 10 method calls are expected!

    Trace

Failurereport

    Testheadder – staticTest_isPalindrome(math.tests_palinDromeArray.PalindromeArray_Test)

    Message – At least 10 method calls are expected!

    Trace 
Die andere Palindrom-Aufgabe liefert ähnliche Fehler.
Kann mir jemand sagen, was mit "At least 10 method calls are expected!" gemeint ist? (Rekursion habe ich nicht verwendet.)

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von LukasPhysiker »

Hallo Timooo,

kannst du bitte deinen Code posten? Ich habe ein ähnliches Problem. Vielleicht erkennen wir das Problem ja, wenn wir sehen, was unsere Codes gemeinsam haben.

Hier ist mein Code:

Code: Alles auswählen

{
    if(s == null) throw new NullPointerException();
    if(s.isEmpty()) return false;
    char[] c = s.toLowerCase().toCharArray();
    for(int i = 0; i < c.length/2; i++)
    {
        if(c[i] != c[c.length-i-1]) return false;
    }
    return true;
}
Und das ist meine Serverantwort:

Code: Alles auswählen

Antwort des Servers
Junitreport

    Time – 21

    Testcount – 6

    Failurecount – 5

    Ignorerecount – 0

Failurereport

    Testheadder – staticTest_isPalindrome_upplercase_lowercase(math.tests_palinDromeString.PalindromeString_Test)

    Message – Implementation can not be correct at least 3 method calls must happen!

    Trace

Failurereport

    Testheadder – staticTest_length0_Palindrome(math.tests_palinDromeString.PalindromeString_Test)

    Message – Implementation can not be correct at least 1 method call must happen!

    Trace

Failurereport

    Testheadder – staticTest_isPalindrome_singleelement(math.tests_palinDromeString.PalindromeString_Test)

    Message – Implementation can not be correct at least 2 method calls must happen!

    Trace

Failurereport

    Testheadder – staticTest_isPalindrome(math.tests_palinDromeString.PalindromeString_Test)

    Message – Implementation can not be correct at least 3 method calls must happen!

    Trace

Failurereport

    Testheadder – staticTest_isNotPalindrome(math.tests_palinDromeString.PalindromeString_Test)

    Message – Implementation can not be correct at least 3 method calls must happen!

    Trace 
Bei mir werden also nur 3 Method calls expected. Das klingt so, als ob der Test glaubt, in der effizientesten Implemeptierung müsste es mindestens drei Methodenaufrufe geben, was ich irgendwie für eine sehr gefährliche Annahme halte. Jedenfalls kommen die Fehler immer noch, wenn ich z.B. am Anfang ein paar mal die Zeile

Code: Alles auswählen

"".toCharArray();
setze, was ja eigentlich für mehr Methodenaufrufe sorgen sollte. Aber vielleicht wird das vom Compiler wegoptimiert...

Jedenfalls funktioniert der Code bei mir auch einwandfrei, wenn ich ihn in Eclipse ausführe. Das sieht für mich so aus, als wäre ein schwerwiegender Fehler in den Tests, der vor den Testaten behoben werden sollte!

Timooo
Neuling
Neuling
Beiträge: 3
Registriert: 5. Mai 2017 20:23

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von Timooo »

Hallo Lukas,

ich habe genau die gleiche Implementierung wie du gewählt und auch schon das mit dem extra Methoden Aufrufen probiert.
Das klingt so, als ob der Test glaubt, in der effizientesten Implemeptierung müsste es mindestens drei Methodenaufrufe geben
Das habe ich auch vermutet. Es kling für mich jedoch sehr absurd so etwas zu testen. Aber vielleicht ist es ja wirklich so und einfach ein Fehler in den Tests.

Julian Prommer
Moderator
Moderator
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von Julian Prommer »

Die Test wären damit um einiges präziser, ohne genau eine Lösung zu erzwingen!
AuD Orga

LukasPhysiker
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 111
Registriert: 6. Mai 2017 13:05

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von LukasPhysiker »

Kann ich das als Zustimmung verstehen? D.h. die Tests werden noch angepasst?

Allgemein fände ich mal interessant, inwieweit wir solche Fehler beim Testat anfechten können. Werden unsere Codes auf eine Weise gespeichert, in der wir hinterher selbst nochmal darauf zugreifen können? Wird der Quelltext der Tests irgendwann freigegeben? Wenn wir den Betreuer beim Testat davon überzeugen können, dass der Code trotzdem richtig ist, kann der dann die Antwort des Servers überschreiben, so dass wir trotzdem bestehen?

Julian Prommer
Moderator
Moderator
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von Julian Prommer »

jap...
Die Testate sollten einsehbar sein bleiben nach dem Testat.

Bei den im Forum aktiven mache mir ehrlich gesagt eher weniger Sorgen. Jeder Forumsbeitrag verbessert die Qualität...
AuD Orga

hallo6
Erstie
Erstie
Beiträge: 14
Registriert: 4. Mai 2017 10:36

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von hallo6 »

Hallo,

ich weiß nicht ob der Fehler in den Tests schon behoben wurde, auf jeden Fall funktionieren sie immer noch nicht, oder die Aufgabenstellung ist Fehlerhaft. Dort steht:
Bei Worten ungerader Länge wird der Buchstabe in der Mitte nicht untersucht.
Nun bietet die Aufgabe zwei Möglichkeiten an sie zu lösen:
1. mit einem Char-Array
2. mit gezielten Aufrufe von "charAt"

Mein Code ist der folgende:

Code: Alles auswählen

{
    if(!StringHelper.isEmpty(s)){
        s = StringHelper.toLowerCase(s);
        for(int i = 0; i < StringHelper.length(s)/2; i++)
            if(!StringHelper.equals(StringHelper.charAt(s, i) + "", StringHelper.charAt(s, StringHelper.length(s)-i-1) + ""))
                return false;
        return true;
    }else
        return false;
}
Es schlägt ein Test fehl, der behauptet:
Implementation can not be correct at least 1 method call toLowerCase or charAt must happen!
Ein Wort der Länge 1 ist für mich ungerade und der Buchstabe muss somit nicht betrachtet werden, was im Widerspruch zum Test steht.

Auch witzig ist, dass die Methode StringHelper.toCharArray(String s) scheinbar die Methode StringHelper.charAt(String s, int pos) benutzt und mein Code somit durch einfügen einer netten, schönen und unnützen Zeile:

Code: Alles auswählen

StringHelper.toCharArray(s);
gültig wird...
Zuletzt geändert von hallo6 am 11. Mai 2017 11:46, insgesamt 1-mal geändert.

Julian Prommer
Moderator
Moderator
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von Julian Prommer »

Bitte weiter maulen!

Die Testfälle sind sehr speziell.
Testfälle für normale Programme sind im Vergleich zu denen hier einfach zu schreiben.

Hier beim codemonkeys muss durchgesetzt, dass auch wirklich etwas anständiges programmiert wurde und nicht nur die Erwartungen der Testfälle erfüllt werden....

Wenn Sie verstehen was ich meine...

Tests sind angpasst und hochgeladen.
AuD Orga

mlang
Neuling
Neuling
Beiträge: 3
Registriert: 28. Apr 2017 11:44

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von mlang »

Failurereport

Testheadder – dynamic_test_Palindrome(math.tests_palinDromeString.PalindromeString_Test)

Message – isPalindrome should return false for the dynamic created String: jhpnlbto. Your solution returned: false
Hmmm....

Außerdem:
Failurereport

Testheadder – staticTest_isPalindrome_upplercase_lowercase(math.tests_palinDromeString.PalindromeString_Test)

Message – Implementation can not be correct at least 1 method call isEmpty or length() or toCharArray must happen!

Mein Code:

Code: Alles auswählen

{if (s.isEmpty()) return false;
if (s.length() == 1) return true;
s = s.toLowerCase();
char [] Arr = s.toCharArray();
int l = s.length();
for (int i = 0; i < l/2; i++){
    if (Arr[i] == Arr[l-1-i]){return false;}
}
return true;
}

Julian Prommer
Moderator
Moderator
Beiträge: 167
Registriert: 17. Apr 2013 15:48

Re: [Codemonkeys] Iterativ -> Palindrom

Beitrag von Julian Prommer »

StringHelper nutzen!
AuD Orga

Antworten

Zurück zu „AuD: Programmieraufgaben“