Как я могу вернуть это значение "counter" из одного метода в основной метод? - PullRequest
0 голосов
/ 15 мая 2019

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

smalllestNumber (): взять 3 числа, введенных пользователем, и вывести наименьшеечисло

средний (): взять 3 числа, введенные пользователем, и вывести среднее значение

countVowels (): взять фразу, введенную пользователем, и вывести количество гласных в этой фразе

Для меня я могу вернуть значение из метода 1 и метода 2 обратно в основной метод.Для метода 3, когда я пытаюсь вернуть значение счетчика, он ВСЕГДА возвращает 0, даже если в фразе есть ARE гласные.

Может кто-нибудь объяснить, что я делаю неправильно?(извините за проблемы с отступами, я никогда раньше не использовал переполнение стека)

Я не знаю, почему он возвращает 0

public static int countVowels(String words) {
    int count=0;
    for (int i=0; i<words.length(); i++) {
        if (words.charAt(i) == 'a' || words.charAt(i) == 'e' || words.charAt(i) == 'i' || words.charAt(i) == 'o' || words.charAt(i) == 'u') {
            count++;
        } 
    }
    return(count);

}

Ответы [ 3 ]

0 голосов
/ 15 мая 2019

Если ваш метод имеет тип возвращаемого значения String, то возвращает строку:

public static String method3(String words){
 int count = 0;
//logic here
return "" + count; // The "" + will convert the count to a string, if that is what you want. 

}

Вы также можете изменить тип возвращаемого значения метода, чтобы он возвращал int:

public static int method3(String words){
     int count = 0;
    //logic here
    return count;

    }

Исходя из вашей логики, если строка в переменной words имеет какую-либо из гласных, то она будет увеличивать счет на единицу, если нет, она не будет увеличивать его и возвращать 0. Если выотправив пустую строку или строку без гласных, метод вернет 0.

0 голосов
/ 15 мая 2019
  • Переместите return за пределы цикла (ваш код возвращается внутрь, объясняет, почему вы всегда получаете 0)
  • toLowerCase каждый word символ, чтобы учесть регистр
  • Создайте набор из всех гласных и проверьте, содержит ли он каждый символ word (см. Следующий пункт)
  • * Обратите внимание, что indexOf, который вызывает ваш код, всегда будет возвращать только первое вхождениеиндекс;это заставит ваш код не всегда возвращать правильный ответ, даже после перемещения return за пределы цикла. Ваш код, использующий indexOf, также заставляет его иметь квадратичное время выполнения O (n ^ 2) (где n - это длина word). Мои решения здесь не используют indexOf и являются линейными O (n) во время выполнения .И ваше решение, и мое - это постоянное пространство памяти O (1).

Как показано ниже :

public static String countVowels(String word){
  int count = 0;

  Set<Character> vowels
    = new HashSet<>(Arrays.asList("a", "e", "i", "o", "u"));
  for(int i = 0; i < words.length(); i++){
    if(vowels.contains(Character.toLowerCase(word.charAt(i)))) {
      count++;
    }
  }

  return "This is the number of vowels " + count;
}

Еще лучше (оптимизация стиля кода)) - используйте расширенный цикл :

public static String countVowels(String word){
  int count = 0;

  Set<Character> vowels
    = new HashSet<>(Arrays.asList("a", "e", "i", "o", "u"));
  for(char curChar: word.toCharArray()){
    if(vowels.contains(Character.toLowerCase(curChar))) {
      count++;
    }
  }

  return "This is the number of vowels " + count;
}
0 голосов
/ 15 мая 2019

Ваш count является int (не String), поэтому вы должны вернуть int. Вместо String.indexOf(String) вы должны использовать String.charAt(int) (или использовать цикл for-each на String.toCharArray()). Нет необходимости увеличивать на ноль, и вы рассматриваете только строчные буквы (так что звоните String.toLowerCase()). Как,

public static int method3(String words) {
    int count = 0;
    for (char ch : words.toLowerCase().toCharArray()) {
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
            count++;
        }
    }
    return count;
}

Также рассмотрим более значимое имя метода (например, countVowels()).

...