2015-11-16 2 views
0

У меня возникла проблема с возвратом логического значения в соответствии с заданным условием. Я думал, чтобы проверить данное условие на полные возможности Мне нужно использовать для петли. Но когда я попытался скомпилировать его, это дает мне ошибку, возможно потому, что существует неопределенность, возвращающая логическое значение, использующее цикл for. Вот исходная задача:Могу ли я возвращать значение Boolean в инструкции цикла?

Return true if the given string contains a "bob" string, but where the middle 'o' char can be any char. 

bobThere("abcbob") → true 
bobThere("b9b") → true 
bobThere("bac") → false 

И вот мой код:

public boolean bobThere(String str) 
    { 
     for(int i=0; i<str.length()-3; i++) 
     { 
      if (str.length()>=4): && str.charAt(i)=='b' && str.charAt(i+2)=='b') 
      { 
       return true; 
      } 
      else 
       return false; 
      else if (str.length()==4 && str.charAt(0)=='b' && str.charAt(2)=='b') 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 

Я просто хотел спросить: 1. Могу ли я исправить этот код для возвращения значения. Я имею в виду, могу ли я использовать для цикла и возвращать определенное значение для данного условия? Если да, пожалуйста, не могли бы вы дать мне образец. 2. Или вы можете решить любые проблемы, кроме цикла, чтобы решить эту проблему.

Заранее спасибо.

+1

Итак, что сообщенная ошибка ?! (и нет, нет причин, по которым вы не сможете возвращать логическое значение внутри цикла) – Alnitak

+4

У вас есть 'if-else', за которым следует' else-if else'. Это неправильно. Пожалуйста, пройдите основные ограничения управления java – TheLostMind

+1

Существуют различные проблемы с этим. Для начала: а) что, если вы никогда не войдете в тело цикла? б) у вас есть 'else if' после простого' else' - это неверно; что вы ожидали от этого? c) Кажется, вы пытаетесь вернуться из * каждой итерации цикла. Я подозреваю, что ты этого не хочешь. –

ответ

4

Ошибка компилятора почти наверняка, потому что у вас есть elseif после else. Это неверно.

Посмотрите на свой код, что вы, кажется, хотите сделать, это цикл через строку, а затем вернуть true, если вы находитесь в начале строки b?b. Я не уверен, почему у вас есть второе условие if - на данный момент ваш код будет проверять первый и третий символы строки на на каждую итерацию цикла, если длина строки составляет ровно четыре символа. Бессмысленно, он не должен быть там. Проверка длины не требуется вообще.

Кроме того, ваше конечное условие для цикла в настоящее время i < string.length()-3. Это означает, что последние три символа строки не будут проверяться. Вам нужно будет изменить это на i <= string.length()-3 или i < string.length()-2, чтобы решить эту проблему.

Ваш else return false материал станет для вас серьезной проблемой. Ваш код войдет в цикл один раз, а затем вернет true или false, не переходя к следующей фазе цикла. То, что вам нужно сделать, - это цикл через строку, и если вы найдете то, что ищете, верните true. В противном случае не возвращайтесь вообще и продолжайте движение. Если вы дойдете до конца цикла, это означает, что вы никогда не нашли то, что искали, поэтому вы можете в этот момент вернуть false.

Принимая во внимание эти комментарии, ваш пересмотренный код будет выглядеть следующим образом (обратите внимание, я не компилируюсь или запустить это):

public boolean bobThere(String str) 
{ 
    for(int i = 0; i <= str.length() - 3; i++) 
    { 
     if (str.charAt(i) == 'b' && str.charAt(i + 2) == 'b') 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Ты отлично поработал! Спасибо. Хорошо, что мой глупый мозг мог понять это :). –

Смежные вопросы