java. содержит не возвращая правильное логическое значение? - PullRequest
0 голосов
/ 05 сентября 2018

Простая проблема, возникающая. Не уверен, почему это не работает? Снимок экрана прилагается.

Скриншот

1 Ответ

0 голосов
/ 05 сентября 2018

Итак, вам нужно принять это:

public static boolean xyzThere(String s) {
  return !s.contains(".xyz") && s.contains("xyz");
}

И разбей его.

Для начала недостаточно сказать, содержит ли строка xyz, потому что (как в случае неудачного теста) в строке может быть много экземпляров xyz.

Так что вам нужно выяснить, в чем логика.

Один из способов выразить это было бы сказать:

Мы всегда терпим неудачу , если не существует хотя бы одной последовательности xyz, которая также не является .xyz

Так что, может быть, мы ищем петлю.

public static boolean xyzThere(String str) {
    boolean result = false;
    String s = str;
    int n = s.indexOf("xyz");
    while(n >= 0) {
        // if n is 0 then there was no preceeding dot so we win
        if (n == 0) { return true; }
        // if the immediately preceedding character was not a '.' return true
        char c = s.charAt(n-1);
        if (c != '.') { return true; }
        // otherwise keep looking until no more instances of "xyz" in the string
        s = s.substring(n + 3);
        n = s.indexOf("xyz");
    }
    return result;
}
...