Детектор пробелов возвращает ошибки - PullRequest
0 голосов
/ 02 октября 2011

Я создал метод для обнаружения символов пробелов.Я прохожу строку и проверяю каждый символ на наличие пробелов.Если это символ пробела, я возвращаю true, а если нет, возвращаю false.Тем не менее, я получаю сообщение об ошибке компиляции с указанием «отсутствует оператор возврата».Поскольку у меня уже есть два оператора возврата «истина» и «ложь», я не понимаю, почему произошла ошибка.Вы можете помочь мне или указать мне правильное направление?Заранее спасибо.

public boolean isWhitespace()
{
    for (int i=0; i<string.length(); i++)
    {
        if (Character.isWhitespace(i))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

Ответы [ 3 ]

1 голос
/ 02 октября 2011

Представьте, если бы string.length() равнялось 0. Что будет возвращено?

Кроме того, обратите внимание, что это не соответствует тому, что вы заявили, а именно - пройти строку и проверить каждый символ.На самом деле он ничего не проверяет в строке, потому что вы используете i.Если бы он проверял строку, он все равно проверял бы только первый символ строки.Если этот символ является пробелом, true сразу возвращается, а если нет, false возвращается немедленно.

0 голосов
/ 02 октября 2011

Вот как ваш код должен выглядеть :

public boolean isWhitespace(String string) { // NOTE: Passing in string
    if (string == null) {  // NOTE: Null checking
        return true; // You may consider null to be not whitespace - up to you
    }

    for (int i=0; i < string.length(); i++) {
        if (!Character.isWhitespace(string.charAt(i))) { // NOTE: Checking char number i
            return false; // NOTE: Return false at the first non-whitespace char found
        }
    }

    return true; // NOTE: Final "default" return when no non-whitespace found
}

Обратите внимание, что это учитывает крайние случаи пустой (нулевой длины) строки и нулевой строки

0 голосов
/ 02 октября 2011

Вы перебираете длину строки, но пытаетесь вернуться в этот цикл.Логика не имеет смысла.

Подумайте о проблеме, которую вы пытаетесь решить - хотите ли вы проверить, является ли символ пробелом, или вся строка содержит хотя бы один пробел?Для последнего:

boolean hasWhite = false;
for(int i=0; i < string.length(); i++)
{
  if(Character.isWhitespace(string.charAt(i)))
  {
     hasWhite = true;
     break;
  }
}

return hasWhite;

РЕДАКТИРОВАТЬ: гораздо более простой подход, если вам нравится эта штука ;-) -

return string.contains(" ");
...