通过比较每个单词包含的元音数量对所有单词进行排序。该 元数最少的单词将首先出现。如果您有多个具有相同元音数量的单词,则该组将按字母顺序排序。
我相信我已经完成了大部分项目,我只是不知道为什么它不起作用。
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
方法中。我不确定。有人能帮助我吗?
答案 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'等)