Глядя на такие сообщения, как «Как мне вернуть последнее сгенерированное число в цикле 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 существует только в операторе 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();
}
«Я не могу поместить оператор return вне цикла, потому что тогда будет возвращено 1, начальное значение wc». Почему вы так думаете? Попробуйте и посмотрите.