считать и отображать гласные в строке, используя методы массива java - PullRequest
0 голосов
/ 03 апреля 2020

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

Enter a string:
IAMHERE
a  : occured 0 
e  : occured 0 
i  : occured 0 
o  : occured 0 
u  : occured 0 
A  : occured 1 
O  : occured 0 
U  : occured 0
I  : occured 1
E  : occured 2

Вот что я сделал до сих пор:

import java.util.Scanner;

public class CountVowels {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a string:");
        String input = sc.next();
        char[] chars = createArray(input);
        countLet(chars);
    }

    static char[] createArray(String str) {
        char[] chars = new char[str.length()];
        for (int i = 0; i < chars.length; i++) {
            chars[i] = str.charAt(i);
        }
        return chars;
    }

    static void countLet(char[] chars) {
        char[] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'O', 'U', 'I', 'E'};
        int numberOfVowels = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == vowels[i]) {
                numberOfVowels++;
            }
            System.out.println(vowels[i] + "  : occured " + numberOfVowels + " ");
        }
    }
}

Я знаю, откуда возникла проблема ---> countLet Потому что я сравниваю все символы в последовательности с гласными ... например, первая буква символов - «я», но первая буква гласных - «а», очевидно, что они не равны, тем более что вывод моего кода не сравните буквы «I» и «E», так как ввод меньше vowels.length ...

Вывод последнего кода:

Enter a string:
IAMHERE
a  : occured 0 
e  : occured 0 
i  : occured 0 
o  : occured 0 
u  : occured 0 
A  : occured 0 
O  : occured 0 

Так что я могу сделать? !

1 Ответ

1 голос
/ 03 апреля 2020

Проблема возникает при сравнении chars[i] с vowels[i]. Так как вы увеличиваете i, программа не имеет нужного результата.

Например, строка: Hello:

H проверяется только против 'a'

e проверяется только по 'e'

l проверяется только по 'i' и c.

Это также означает, что длина строка больше vowels.length, тогда вы получите исключение IndexOutOfBounds.

Код, который необходимо проверить, является ли каждая буква гласной:

for (char c : input) { // Loop through each character in the string
    for (char v : vowels) { // Loop through each vowel
        if (c == v) { // The letter is a vowel
           numberOfVowels++;
           break; // The letter cannot be another vowel too, so break out of the inner loop
        }
    }
}

Затем вы можете изменить это и изменить гласные на Map<Character, Integer>, чтобы отследить, сколько раз была видна каждая гласная

...