Warum java aufgabe falsch obwohl alle Testläufe funktionieren (siehe Foto)?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Weil er nicht funktioniert.

countYZ("fez!") returned 0, countYZ("fez!!") gibt aber 1 zurück.

Nichtsnutz12 
Fragesteller
 20.11.2019, 18:28

nope gibt beides 1 HÄÄ ich bin voll verwirrt alttttaaaaaaaa

0
Nichtsnutz12 
Fragesteller
 20.11.2019, 18:29

achsoo ich glaub ich verstehe wieso weil das in die falsche if Bedingung dann geht stimmts

0
jort93  20.11.2019, 18:32
@Nichtsnutz12

Ich muss ehrlich sagen, so ganz verstehe ich deinen code nicht. Ich hätte das ja mit String.split() in einzelne wörter geteilt, dann die sonderzeichen rausgefiltert und mich um jedes wort einzeln gekümmert.

3

Oh Boy, du machst dir das aber kompliziert... im Prinzip müsstest du doch nur den String von Position 0 bis (Länge - 1) durchlaufen und jeweils überprüfen, ob das aktuelle Zeichen ein y oder ein z ist und ob das jeweils nächste Zeichen kein Buchstabe ist. Wenn die beiden Bedingungen erfüllt sind - Zähler hoch. Und dann nach der Schleife noch eine Sonderbehandlung für das letzte Zeichen - wenn das y / z ist, dann muss der Zähler nochmal um eins erhöht werden. Ich hab das jetzt nicht getestet, wenn ich einen Denkfehler habe, gerne drauf hinweisen.

In dem Sinne würde ich das Ding komplett neuschreiben und mir - ebenso wie anderswo hier angesprochen - eine Entwicklungsumgebung (Eclipse, Netbeans, ...) zum Debuggen und evtl. auch für Unit-Tests einrichten.

Nichtsnutz12 
Fragesteller
 20.11.2019, 21:33

Oha danke ej mir fallen nie so leichte Algorithmen ein immer mach ich’s kompliziert

0
bluebird5  22.11.2019, 17:46
@Nichtsnutz12

Naja, in diesem Fall wäre es vielleicht sinnvoll, wenn du Computer, Schleifen und Co. mal vergisst und einfach nachdenkst, wie du die Aufgabe mit Zettel und Stift lösen würdest. Auf dem Zettel steht "Day Fez FEZ! FAY!", wie würdest du vorgehen, wenn du da die Aufgabe erfüllst und alle y/z am Ende eines Wortes zählen sollst. Das Vorgehen wäre mit Sicherheit so, wie ich es im ersten Absatz der Antwort beschreibe. Dann steht der Algorithmus, das Ganze in Code zu gießen ist dann nur noch Handwerk.

1
Nichtsnutz12 
Fragesteller
 22.11.2019, 20:14
@bluebird5

oha ej ich will auch so denken können ok danke werd ich nun anwenden wenn ich mal nicht weiß dann stell ich mir das so vor mit Zettel und Stift danke BB

0
aber ich weiß das ist verdammt schwer zu durchblickender code

und das ist nicht gut. Versuch es doch mal, einfacher zu lösen.

So schwer ist das nicht ;)

aber er klappt aber bei "other tests" leider nicht, wieso?

weil der Test gerade bei diesen paar Beispielen funktioniert, bei den anderen Beispielen (die du nicht siehst) aber fehlschlägt.

xxxcyberxxx  21.11.2019, 18:44

btw wenn du interessiert bist und es vergleichen willst, kannst du mal meine Lösung dazu anschauen:

https://github.com/Akumatic/CodingBat

Solltest du natürlich nicht als Musterlösung oder Vorlage verwenden - und es ist natürlich auch nicht immer die beste Lösung

1

Ich bin mir jetzt nicht ganz sicher dazu müsste ich den Code mal debuggen aber versuche mal den string "day " also mit ein paar Leerzeichen am Ende.

Nichtsnutz12 
Fragesteller
 20.11.2019, 18:34

wie machst du das ich will auch Debuggen lernen

0
PeterKremsner  20.11.2019, 18:48
@Nichtsnutz12

Eclipse oder eine andere Java IDE Installieren und dann in der IDE auf debuggen klicken.

Breakpoint setzen und dann jede Codezeile mit Single Step durchgehen und schaun wo das Programm etwas falsches macht. Debuggen ist eigentlich das kleine 1 mal 1 der Fehlersuche.

2
PeterKremsner  20.11.2019, 19:12
@Nichtsnutz12

Btw ich würde das Programm vereinfachen.

Du kannst zB indexof verwenden um die Indizes von y und z zu bekommen, dann musst du nur noch prüfen ob der nächste Charakter kein Buchstabe ist oder das Ende des Strings und wenn ja zählen.

1