Как вернуть значение, которое было изменено в цикле for?

Глядя на такие сообщения, как «Как мне вернуть последнее сгенерированное число в цикле for?», «Как мне вернуть значение из цикла for?» и «Не удается вернуть значение вне цикла for с помощью Java» не помогло, потому что проблемы, описанные в постах, кажутся касательными к заголовкам постов.

Я получаю сообщение об ошибке: «ошибка: отсутствует оператор возврата».

Я пытаюсь создать количество слов, сначала установив количество слов равным 1. Цикл for предназначен для обхода предложения String. Каждый раз, когда в строке встречается пробел, количество слов увеличивается на 1.

Где мне разместить оператор возврата, чтобы программа работала как задумано? Я не могу поместить оператор return вне цикла, потому что тогда будет возвращено 1, начальное значение wc.

// wc = word count
public static int wordCount(String sentence) {
  int wc = 1;
  for (int a = 0; a <= sentence.length()-1; a++) {
    if (sentence.charAt(a) == ' ') {
      wc += 1;
    }
    if (a == sentence.length()-1) {
      return wc;
    }
  }
}

«Я не могу поместить оператор return вне цикла, потому что тогда будет возвращено 1, начальное значение wc». Почему вы так думаете? Попробуйте и посмотрите.

tgdavies 23.11.2022 06:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы получаете сообщение об ошибке, потому что ваш оператор return существует только в операторе if внутри цикла, и, следовательно, существует вероятность того, что он никогда не будет достигнут.

Есть причина, по которой вы объявляете и инициализируете переменную вне этого цикла, вы также должны возвращать переменную вне цикла.

public static int wordCount(String sentence) {
  int wc = 1;
  for (int a = 0; a <= sentence.length() - 1; a++) {
    if (sentence.charAt(a) == ' ') {
      wc += 1;
    }
  }
  return wc;
}

Вы должны поместить его точно вне цикла for и внутри метода.

public static int wordCount(string sentence) {
...
for(...) {
if (condtion) {
...
}
if (condition) {
...
}
}
return wc;
}
Ответ принят как подходящий

Метод должен возвращать значение. В вашем заданном коде вы возвращаетесь только в том случае, если выполняется определенное условие. В противном случае возвращаемое значение отсутствует. Это проблема с вашим кодом.

Одна вещь, которую вы можете сделать, это разорвать цикл, как только ваше условие будет выполнено, а затем вернуться в конце метода.

public static int wordCount(String sentence) {
  int wc = 1;
  for (int a = 0; a <= sentence.length()-1; a++) {
    if (sentence.charAt(a) == ' ') {
      wc += 1;
    }
    if (a == sentence.length()-1) {
      break;
    }
  }
  return wc;
}

Но в вашем коде вы дважды проверяете одно и то же условие.

Во-первых, в цикле for вы переходите от a = 0 к a <= sentence.length()-1.

Вы можете изменить его на это, чтобы повысить читабельность вашего кода:

for (int a = 0; a < sentence.length(); a++) {

Это означает, что вы начинаете свой цикл, где a = 0, и повторяете до тех пор, пока a не станет меньше, чем длина sentence. Это точно так же, как «пока a меньше или равно (длине sentence - 1)». Проверьте, насколько здесь проще объяснение кода.

Затем внутри вашего цикла вы проверяете, нужно ли возвращать a == sentence.length() - 1. Но это именно то условие, при котором разрывается ваша петля for.

Итак, ваш код можно упростить до следующего:

public static int wordCount(String sentence) {
  int wc = 1;
  for (int a = 0; a < sentence.length(); a++) {
    if (sentence.charAt(a) == ' ') {
      wc += 1;
    }
  }
  return wc;
}

Если у вас нет других ограничений, вы можете просто использовать это для подсчета количества слов:

public static int wordCount(String sentence) {
  String[] words = sentence.split(" ");
  return words.length(); 
}

Или даже один лайнер вроде этого:

public static int wordCount(String sentence) {
  return sentence.split(" ").length(); 
}

Другие вопросы по теме