Распечатайте операторы внутри цикла, вызывая несколько выходных данных вместо одного, как я могу это исправить, не используя «return»? - PullRequest
0 голосов
/ 06 апреля 2019

Я начинающий кодер.Мой код должен отображать «да», если ввод строки состоит из «l» + «любой символ» + «l».Например, «uwbıclsl» должен иметь вывод «yes», потому что буква зажата между двумя l.Однако, поскольку мои операторы print находятся внутри цикла for, он отображает несколько «да» и «нет».Как я могу исправить это так, чтобы у меня был только 1 вывод (да или нет) и все еще были операторы print вместо return?

for (int i = 0; i < s.length(); i++) {

            if ((s.charAt(i) == 'l') && (s.charAt(i + 2) == 'l')) {

                System.out.print("YES");

            } else
                System.out.print("NO");

Ответы [ 5 ]

1 голос
/ 06 апреля 2019

Лучше использовать регулярные выражения для этого

System.out.println(s.matches(".*l.l.*") ? "YES" : "NO");
0 голосов
/ 06 апреля 2019

Внесите следующие изменения -

String result = "NO";
for (int i = 0; i < s.length(); i++) {

            if ((s.charAt(i) == 'l') && (s.charAt(i + 2) == 'l')) {

                result = "YES";

            }
}

System.out.println(result);

Примечание. Теперь вам больше не нужен блок, также вам необходимо обработать исключение StringIndexOutOfBoundsException в вашем операторе if, надеюсь, вы сможете решить эту проблему.

0 голосов
/ 06 апреля 2019

Как насчет незначительного изменения текущего кода в отдельном методе и последующего возврата "Yes", если вы нашли два l, разделенных другим символом, так как вам не нужно продолжать проверку остальныхстрока:

class Main {
  public static void main(String[] args) {
    String str = "uwbıclsl";
    System.out.println(charBetweenTwoLs(str));
    String str2 = "abclol";
    System.out.println(charBetweenTwoLs(str2));
  }

  static String charBetweenTwoLs(String str) {
    for (int i = 0; i < str.length() - 2; i++) { // Note the - 2 since you are checking on each iteration 2 characters ahead.
      if (str.charAt(i) == 'l' && str.charAt(i+2) == 'l') {
        return "Yes";
      }
    }
    return "No"; // return No if two 'l' characters were not found sperated by another character.
  }
}

Вывод:

Yes
Yes
0 голосов
/ 06 апреля 2019

Вы также можете отказаться от цикла и использовать регулярные выражения

String s = "uwbıclsl".matches(".*(l.l).*") ? "yes" : "no";
        System.out.println("s = " + s);
0 голосов
/ 06 апреля 2019

Если вам нужно распечатать Да / Нет только один раз, попробуйте следующее.Даже если несколько совпадений, он просто говорит да один раз.Также исправлена ​​длина конца цикла for для (length () - 2), чтобы избежать исключения.Прокомментируйте, если у вас есть какие-либо вопросы или это не ожидаемое решение.

boolean isFound = false;
for (int i = 0; i < s.length()-2; i++) {

            if ((s.charAt(i) == 'l') && (s.charAt(i + 2) == 'l')) {

              isFound = true;
            } 
}

System.out.println (isFound?"YES":"NO");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...