按元音数量对数据文件进行排序

时间:2014-02-14 04:34:05

标签: java

通过比较每个单词包含的元音数量对所有单词进行排序。该 元数最少的单词将首先出现。如果您有多个具有相同元音数量的单词,则该组将按字母顺序排序。

我相信我已经完成了大部分项目,我只是不知道为什么它不起作用。

public class Word implements Comparable<Word> {
    private String word;

    public Word(String s) {
        word = s;
    }

    private int numVowels() {
        String vowels = "AEIOUaeiou";
        int vowelCount = 0;

        for (int i = 0; i < vowels.length(); i++) {
            if ((vowels.charAt(i) == 'a') || (vowels.charAt(i) == 'e') || (vowels.charAt(i) == 'i') || (vowels.charAt(i) == 'o') || (vowels.charAt(i) == 'u')) {
                return vowelCount;
            }
        }
        return vowelCount;
    }

    public int compareTo(Word rhs) {
        for (int i = 0; i < word.length(); i++) {
            if ((word.charAt(i) == 'a') || (word.charAt(i) == 'A')) {
                System.out.println(word);
            } else if ((word.charAt(i + 1) == 'e') || (word.charAt(i + 1) == 'E')) {
                System.out.println(word);
            }
        }

        return -1;
    }

    public String toString() {
        return word;
    }
}

我认为我的错误是在compareTo方法中。我不确定。有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

首先 - 我没有意识到Word是你的自定义类。那就是说......它有很多瑕疵。

您的compareTo方法实际上只是将两个字符串比较在一起。你想做的是这样的:

public int compareTo(Word other) {
    return word.compareTo(other.getWord());
}

原因是String implements Comparable<String>

现在,如果这不是你想要的(我真的不确定究竟是什么),那么你可以考虑比较两个元音的数量{{ 1}}实例有。

Word

如果当前public int compareTo(Word other) { return word.numVowels() - other.numVowels(); } 的元音比被比较的Word更多,则上面将返回正值;如果有更少,则返回负值;如果元音相等,则返回零。

接下来,您的Word方法完全被破坏了。看看你在迭代的内容:numVowels()vowels字符串总是一个常量值。这是从不会改变 - 正好有十个元音,五个小写,五个大写。

您要执行的操作是检查 vowels 字段对照元音集。

这是一个更好的*解决方案:使用word - 您可以随时查找所有人。

Set<Character>

然后,您在循环中所要做的就是:

Set<Character> vowelSet = new HashSet<Character>() {{
        add('a');
        add('A');
        add('e');
        add('E');
        add('i');
        add('I');
        add('o');
        add('O');
        add('u');
        add('U');
}};

*没有考虑到Y有时是元音。

答案 1 :(得分:0)

if((vowels.charAt(i) == 'a') || (vowels.charAt(i) == 'e')  || (vowels.charAt(i) == 'i') || (vowels.charAt(i) == 'o') || (vowels.charAt(i) == 'u') || (vowels.charAt(i) == 'A') || (vowels.charAt(i) == 'E') || (vowels.charAt(i) == 'I') || (vowels.charAt(i) == 'O') || (vowels.charAt(i) == 'U'))   
    {
        vowelCount++;
    }

当您返回vowelCount时,您之前返回0。你需要在找到元音时增加vowelCount,然后在完成循环后返回它。您还需要检查大写元音而不仅仅是小写元音以获得准确的计数。

您的compareTo方法甚至不接近正确...

答案 2 :(得分:-3)

首先,尽量不要在这里发布你的作业。您的numVowels()方法也是错误的。

private int numVowels() //FIXED METHOD
{
    String vowels = "AEIOUaeiou";
    int vowelCount = 0;

    for(int i = 0; i < vowels.length(); i++)
    {
        if((vowels.charAt(i) == 'a') || (vowels.charAt(i) == 'e')  || (vowels.charAt(i) == 'i') || (vowels.charAt(i) == 'o') || (vowels.charAt(i) == 'u') || (vowels.charAt(i) == 'A') || (vowels.charAt(i) == 'E') || (vowels.charAt(i) == 'I') || (vowels.charAt(i) == 'O') || (vowels.charAt(i) == 'U'))      
        {
            return vowelCount; //Will return lowercase AND capital vowels :)
        }
    }
    return vowelCount;
}

您的原始代码仅搜索小写的“a”,“e”,“i”,“o”和“u”。我将大写字母添加到你的if语句('A','E'等)