Найдите наиболее гласные слова в предложении (это может быть несколько максимальных слов, которые эквивалентны друг другу) - PullRequest
0 голосов
/ 09 марта 2020

Подсчет гласных в слове для метода

public class Methods6 {
 public static int countVowel(String words) {
        int count = 0;
        char[] vowel = {'a', 'e', 'i', 'o', 'u'};
        for (int i = 0; i < words.length(); i++) {
            char ch = words.charAt(i);
            for (char cc : vowel) {
                if (ch == cc) {
                    count++;
                }
            }
        }
        return count;
    }

** Найти максимальный гласный в предложении **

public static String maxVowelWords() {
      String sentence = getSentence().toLowerCase();
      String words[] = sentence.split(" ");
      int maxvowel = CountVowel(words[0]), count;
      String maxWord = words[0];
      for (int i = 1; i < words.length; i++) {
          count = CountVowel(words[i]);
          if (count > maxvowel) {
              maxvowel = count;
              maxWord = words[i] + " ";
          }
      }
      return maxWord;

  }}// 2 methods are located  in the same Method Class
public class Test {
    public static void main(String[] args) {
                System.out.println(Methods6.MaxVowelWords());}}

Когда При написании этого метода он дает только первое слово с наибольшим количеством гласных букв (например, --------- привет, мой друг! ----------- просто привет, привет и друг - ----- нет! Как я могу изменить метод этого? Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Я интерпретирую этот вопрос следующим образом:

  • Найдите слово в прилагаемой строке, в которой содержится наибольшее количество гласных.
  • Если одно или несколько слов в этом самом одна и та же строка содержит одинаковое максимальное количество гласных, затем объединяет слова вместе, разделенные пробелом (или чем-то еще).

Итак, если предоставленная строка была: "hello my friend", тогда оба слова hello и friend, будет возвращено из метода maxVowelWords () в форме (скажем):

hello, friend

, так как оба hello и friend содержат 2 гласных, которые так получается максимальное количество гласных в любом данном слове, тогда оба слова возвращаются.

Если предоставленная строка, однако, была: "hello my friend - I live on the Mississippi river.", то только Миссисипи возвращается из метода поскольку в этой строке есть слово only , содержащее максимальное количество гласных - 4. Все остальные слова, содержащие гласные в строке, содержат меньшее количество гласных.

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

public static String maxVowelWords() {
    String sentence = getSentence();
    String words[] = sentence.split(" ");
    int maxvowel = 0; 
    String maxWord = "";
    for (int i = 0; i < words.length; i++) {
        int count = countVowels(words[i]);
        if (count == maxvowel) {
            maxvowel = count;
            // Ternary Operator is used here to applt the delimiter (", ") if needed,
            maxWord += (maxWord.equals("") ? words[i] : ", " + words[i]) + " (" + count + " vowels)";
        }
        else if(count > maxvowel) {
            maxvowel = count;
            maxWord = words[i] + " (" + count + " vowels)";;
        }
    }
    return maxWord;
}

Да, вы начинаете свой l oop из 0 и maxWord Строковая переменная должна быть инициализирована для хранения пустой строки (""). Пусть для l oop выполнит свою работу. И нет, count не является пустой тратой, это фактически требование для получения максимального количества гласных для maxvowel , поскольку каждое строковое слово помещается в процессе.

Вы используете метод с именем getSentence () , чтобы получить строку для обработки, и сразу же вы исказите эту строку оригинала, установив для нее все строчные буквы. Вы действительно не должны этого делать, поскольку слова, которые вы возвращаете из метода maxVowelWords () , не будут изначально предоставленными словами, если в них есть гласные в верхнем регистре. Небольшая модификация метода countVowel () может позаботиться об этом бизнесе, например:

if (Character.toLowerCase(ch) == cc) {
    count++;
}
1 голос
/ 09 марта 2020

В вашем коде есть несколько ошибок. Попробуйте это:

public static String maxVowelWords() {
    String sentence = getSentence().toLowerCase();
    String words[] = sentence.split(" ");
    int maxvowel = 0, count;
    String maxWord = "";
    for (int i = 0; i < words.length; i++) {
        count = countVowel(words[i]);
        if (count > maxvowel) {
            maxvowel = count;
            maxWord = "";
        }
        if(count == maxvowel){
            maxWord = maxWord  + words[i]+ " ";
        }
    }
    return maxWord.trim();

}
...