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

    public static String getSentence() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("cumleni daxil et:");
        String sentence = scanner.nextLine();
        return sentence;
    }

    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 = "";
        for (int i = 0; i < words.length; i++) {
            count = CountVowel(words[i]);
            if (count >maxvowel) {
                maxvowel = count;
                maxWord = "";
            }
            else if(count >= maxvowel){
                maxWord = maxWord  + " " +words[i];
            }
        }
        return maxWord;
    }
}

Тестовый класс

public class Test {
    public static void main(String[] args) {
        System.out.println(Methods6. maxVowelWords());
    }
}

Если я пишу книга красный друг результат, как и ожидалось, но я пишу красная книга друг результат друг (поэтому я не получаю 2 слова книга и друг ).
Как изменить эти методы, я получу макс. Одновременно гласные слова, спасибо за помощь!

Ответы [ 3 ]

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

Если я правильно понимаю ваш подход, похоже, что «несколько» будет достаточно, чтобы превратить else if в if. Но, скорее всего, есть лучшие алгоритмы для той же задачи.

«В некоторой степени», потому что много раз будет «» (пустое место) в начале ваших результатов.

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

Вы можете также рассмотреть возможность использования потокового API для этой проблемы:

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.joining;
import static java.util.Comparator.naturalOrder;

import java.util.Arrays;
import java.util.List;
import java.util.Map;


  static int countVowels(String word) {
    int count = 0;
    for (char c : word.toCharArray()) {
      if ("aeiou".indexOf(c) >= 0) {
        count++;
      }
    }
    return count;
  }

  public static String maxVowelWords() {
    String sentence = getSentence().toLowerCase();
    Map<Integer, List<String>> wordsByVowelCount = Arrays.stream(sentence.split(" "))
        .collect(groupingBy(Methods6::countVowels));
    int maxVowelCount = wordsByVowelCount.keySet().stream().max(naturalOrder()).orElse(0);
    return wordsByVowelCount.get(maxVowelCount).stream().collect(joining(" "));
  }
0 голосов
/ 09 марта 2020

В вашем методе maxVowelWords есть небольшая ошибка.

if (count >maxvowel) {
    maxvowel = count;
//  maxWord=words[i];
    maxWord = "";
}

В случае, если в слове больше гласных, чем в последнем, для maxWord установлено "". Например, у red есть один гласный, теперь он проверяет book, у него есть 2 гласных, он входит в регистр if и устанавливает число maxvowel два, но вы устанавливаете maxWord = "".

Далее вы смотрите на слово friend, которое также имеет два гласных и вы go в другом случае

else if(count >= maxvowel){
    maxWord = maxWord  + " " +words[i];
}

Это добавит друга к выводу, но друга все равно будет отсутствовать.

Вы, вероятно, хотели что-то вроде:

if (count >maxvowel) {
    maxvowel = count;
    maxWord=words[i];
}

Это установит ваш maxWord на текущее слово с наибольшим количеством гласных.

...