Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich habe hier einen Screenshot meines Lösungsansatzes von Codingbat.
Grundlegend geht es um verschachtelte Schleifen, man soll die Worte is und not zählen und vergleichen...
Ich wäre richtig dankbar, wenn jemand erkennt was meine Fehler sind, weil nur die Lösung anzuschauen bringt nicht wirklich etwas.
Meine Vermutung ist, dass es daran liegt, dass ich nach der ersten for-Schleife bereits beide Hilfsstrings initialisiert habe...
Danke für viele Antworten
@xzerotoherox
Du bist auf dem richtigen Weg, einzig fehlt deinem Code der Fall string.lenght()
Hier könntest du den Rest des Strings zerlegen und deine Variablen entsprechend anpassen.
Ebenso würde ich den String ganz zu Beginn dahingehend verändern, dass man alle Leerzeichen entfernt, string.replace(String a, String b) ist ein möglicher Weg. Viel Erfolg!
for (int i = 0; i < str.length() - 3; i++) {
String is = str.substring(i, i + 2);
String not = str.substring(i, i + 3);
Der Fehler liegt hier. Wenn str mit 'is' endet, erfüllst du die Bedingung
Java:
< str.length() - 3;
nicht, da nur mehr 2 Zeichen übrig sind.
Dein Code hat aber noch zusätzliche Schwächen. 1) Du brauchst nur einen Counter den du z.B. bei 'is' erhöhst und bei 'not' reduzierst. Wenn der Counter am Ende gleich 0 ist --> beides kommt gleich oft vor. 2) Wenn du z.B. 'not' findest erhöht deine Schleife i um eins und untersucht unnötigerweise 'ot...'. Aufgabenumformulierung: Schreibe die Funktionen:
1)
Java:
private static int countNotMatchingCharsTillMatched(String text, int start, char[] chars)
Sie soll im übergebenen Text alle Zeichen ab der Position start zählen, die nicht im Übergeben Feld chars enthalten ist. 2)
Java:
private static boolean findStrAtPos(String text, int start, String search)
Sie soll im übergebenen Text genau an der Position start auf den String search testen.
Mit diesen beiden Funktionen lässt sich dein Problem dann z.B. so lösen.
Java:
static public boolean equalIsNot(String text) {
int cnt = 0;
int pos = 0;
int len = text.length();
char[] chars = { 'i', 'n' };
while (pos < len) {
pos += countNotMatchingCharsTillMatched(text, pos, chars);
if (findStrAtPos(text, pos, "is")) {
pos += 2;
cnt++;
}
if (findStrAtPos(text, pos, "not")) {
pos += 3;
cnt--;
}
}
return cnt == 0;
}