1. ホーム
  2. java

[解決済み] isVowel() メソッドに文字列中の文字を指定します。

2022-02-08 04:47:15

質問

たくさんの単語を含むテキストファイルがあります。私のプログラムの1つの部分は、ユーザー入力に基づいて、このリストをスキャンし、要求された数の母音を含む単語を出力ファイルに挿入することになっています。私は isVowel を返すメソッドです。 boolean しかし、これはうまくいかないようで、出力はただの空リストになってしまいます。

以下はその方法です。

public boolean isVowel(char c)
{
    if(c=='a' || c=='A' || c=='e' || c=='E' || c=='i' || c=='I' || c=='o' || c=='O' ||     c=='u' || c=='U')
    {    
        return true;
    }    
    else
    {
        return false;
    }    
}
}   

これがプログラムの中で使われている部分です。

public ArrayList<String> vowelHeavy(int n, int m)
{
    int vowels = 0;
    while(input.hasNextLine())
    {    
        word = input.nextLine();
        if (word.length() == n)
        {
            for(int i = 0; i < word.length(); i++)
            {
                if(isVowel(word.charAt(i)) == true)
                {
                    vowels++;
                }
            }
            if (vowels == m)
            {
                output.add(word);
            }
        }
        word = input.nextLine();
    }
    return output;
}

解決方法は?

あなたの最大の問題は、あなたがリセットされていないことです。 vowels 新しい単語をテストするときに、カウント変数を使用します。その値は、ただ母音の合計を蓄積し続けます。 ファイル内の .

変更する。

int vowels = 0;
while(input.hasNextLine()) {    
   ...

になります。

while(input.hasNextLine()) {    
   int vowels = 0;
   ...


余談ですが、あなたのコードの大部分、つまり isVowel() メソッドを1行で済ませることができます。

int vowels = word.replaceAll("[^aeiouAEIOU]", "").length();

これは、単語から母音以外のすべての文字を削除することで動作します。残っているのは母音なので、長さを取るだけでカウントが得られます。