Укажите, какой гласный встречается чаще всего в строке - PullRequest
0 голосов
/ 24 марта 2020

Я пишу программу на Java, которая должна выдавать вывод, подобный этому:

  • гласные = 8
  • верхний = 2
  • цифр = 5
  • пробел = 6
  • гласный i встречается чаще всего = 4

Мой код компилируется, и я успешно справился со всем, кроме определения, какой гласный звук встречается чаще всего.

Я не уверен, что мне следует делать, сначала посчитайте, сколько раз встречается отдельный гласный (например, просто «а») (в отличие от общего количества гласных в строке). После того, как я нахожу сумму каждого отдельного гласного, я не уверен, что использовать для определения гласного с максимальным значением. Как только я смог выполнить эти два шага, я не совсем уверен, как правильно выводить данные. Я бы предпочел выполнить sh с помощью оператора if, но я не знаю, возможно ли это или нет.

Любая помощь / советы будут с благодарностью, вот код, который я написал:

    // which vowel occurs the most
    if (ch == 'a')
      vowelA++;
    else if (ch == 'e')
      vowelE++;
    else if (ch == 'i')
      vowelI++;
    else if (ch == 'o')
      vowelO++;
    else if (ch == 'u')
      vowelU++;

    if (vowelA > vowelE && vowelA > vowelI && vowelA > vowelO && vowelA > vowelU)
    {
      maxVowels = vowelA;
    }
  }

// OUTPUT
System.out.println("vowel" + " " + "occurs the most = " + maxVowels);

 }
}

Ответы [ 3 ]

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

Там может быть много способов. Я пишу один из них. Вы можете попробовать это:

// for number of VOWELS
for (int i = 0; i < str.length(); i++)
{
    ch = str.charAt(i);
    ch = Character.toLowerCase(ch);

    // is this a vowel
    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
    {
        vowels++;
    }

    // which vowel occurs the most
    if (ch == 'a')
        vowelA++;
    else if (ch == 'e')
        vowelE++;
    else if (ch == 'i')
        vowelI++;
    else if (ch == 'o')
        vowelO++;
    else if (ch == 'u')
        vowelU++;

}

maxVowels = Math.max(vowelA, Math.max(vowelE, Math.max(vowelI, Math.max(vowelO, vowelU))));

Вывод:

enter image description here

Примечание: я только что добавил maxVowels = Math.max(vowelA, Math.max(vowelE, Math.max(vowelI, Math.max(vowelO, vowelU)))); перед логами верхнего регистра c и удалено условие if, в котором вы храните значение maxVowels.

Другой способ: Заменить maxVowels = Math.max(vowelA, Math.max(vowelE, Math.max(vowelI, Math.max(vowelO, vowelU)))); на Collections.max(Arrays.asList(vowelA, vowelE, vowelI, vowelO, vowelU));

0 голосов
/ 24 марта 2020

Если вас интересует потоковое решение:


    public static void main(String[] args) {

        String input = "This String has vowels and 12345 digits";

        Map<String, Integer> counts = input.chars()
                .mapToObj((str) -> charTypes(str))
                .flatMap((it) -> it)
                .collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));

        System.out.println("Vowels: " + counts.getOrDefault("vowel", 0));
        System.out.println("Upper Case: " + counts.getOrDefault("upper", 0));
        System.out.println("Digits: " + counts.getOrDefault("digit", 0));
        System.out.println("White spaces: " + counts.getOrDefault("whitespace", 0));

        Optional<Map.Entry<String, Integer>> maxVowels = counts.entrySet()
                .stream()
                .filter((str) -> str.getKey().length() == 1)
                .filter((str) -> vowels.contains((int)str.getKey().charAt(0)))
                .max(Comparator.comparingInt(Map.Entry::getValue));

        if (maxVowels.isPresent()) {
            System.out.println("Max Vowel was " + maxVowels.get().getKey() + " with  " + maxVowels.get().getValue() + " occurrences");
        } else {
            System.out.println("No vowels found");
        }
    }

    private static Set<Integer> vowels = Set.of((int) 'a', (int) 'e', (int) 'i', (int) 'o', (int) 'u');

    public static boolean isVowel(int c) {
        return vowels.contains(Character.toLowerCase(c));
    }

    public static Stream<String> charTypes(int c) {
        List<String> types = new ArrayList<>();

        if (isVowel(c)){
            types.add("vowel");
            types.add(String.valueOf((char)c));
        }

        if (Character.isWhitespace(c)) {
            types.add("whitespace");
        }

        if (Character.isDigit(c)) {
            types.add("digit");
        }

        if (Character.isUpperCase(c)) {
            types.add("upper");
        }

        return types.stream();
    }

(улучшение типа гласного перечисления будет улучшением)

0 голосов
/ 24 марта 2020

Попробуйте этот код:

{
   public static void main (String []args)
 {
    Scanner scan = new Scanner(System.in);
    String str = scan.nextLine();

    int vowels = 0, digits = 0, spaces = 0, upper = 0;
    String line = str;
    int max_vowel_count = 0;
    for(int i = 0; i < line.length(); ++i)
    {
        char ch = line.charAt(i);
        if(ch == 'a' || ch == 'e' || ch == 'i'
            || ch == 'o' || ch == 'u') {


            int a_count = line.length() - line.replace("a", "").length();
            int e_count = line.length() - line.replace("e", "").length();
            int i_count = line.length() - line.replace("i", "").length();
            int o_count = line.length() - line.replace("o", "").length();
            int u_count = line.length() - line.replace("u", "").length();

            max_vowel_count = Math.max(a_count, Math.max(e_count, Math.max(i_count, Math.max(o_count, u_count))));

            ++vowels;
        }
        else if( ch >= '0' && ch <= '9')
        {
            ++digits;
        }
        else if (ch >= 'A' && ch <= 'Z'){ 
            ++upper; 
        }
        else if (ch ==' ')
        {
            ++spaces;
        }
    }

    System.out.println("Vowels: " + vowels);
    System.out.println("Digits: " + digits);
    System.out.println("Upper Case: " + upper);
    System.out.println("White spaces: " + spaces);
    System.out.println("Max Vowel Count "+ max_vowel_count);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...