我有一个带有多个单词的文本文件。 我的程序的一部分应该根据用户输入来扫描此列表,并将包含所请求的元音数量的单词插入输出文件。 我有一个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;
}

===============>>#1 票数:3 已采纳

您最大的问题是您在测试新单词时没有重置vowels计数变量。 该值只是不断累积文件中的元音总数。

更改:

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

至:

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

isVowel() ,您的大多数代码(包括isVowel()方法)都可以用一行删除:

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

这是通过从单词中消除所有不是元音的字符来实现的; 剩下的就是元音,所以只要花点时间就可以算数了。

===============>>#2 票数:1

有一种更简单的方法来编写此代码:

public boolean isVowel(char c){
   return(your boolean tests);

}

===============>>#3 票数:0

2件事:

  1. 如果word.length() == n test永远不会为真,则output永远不会更改。 请确保测试正确。
  2. 该语句位于while循环的顶部和底部,使您忽略其他所有输入行:

    字= input.nextLine();

  ask by user3505003 translate from so

未解决问题?本站智能推荐: