如何避免计算重复的元音?

时间:2015-10-23 17:08:36

标签: java

我已经编写了第一部分的代码,但它计算了包含重复的元音数量,但我也想知道如何计算元音的数量而不重复。

此外,我正在努力编写代码的第二部分,即报告元音的总和。

这是我到目前为止所写的内容:

import java.io.*;
public class CountVowel {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the string:");
        String s = br.readLine();
        int l = s.length();
        char ch;
        int i;
        int count = 0;
        for(i = 0; i < l; i++)
        {
            ch = s.charAt(i);
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
            {
                count=count+1;
            }
        }
        System.out.println("The number of vowels are:"+count);
    }
}

4 个答案:

答案 0 :(得分:3)

简单地说,您尝试使用不存储任何重复项的Set interface,请使用以下代码

    public static void main(String[] args) throws IOException {

    Set<Character> set = new HashSet<>();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter the string:");
    String s = br.readLine();
    int l = s.length();
    char ch;
    int i;
    int count = 0;
    for (i = 0; i < l; i++) {
        ch = s.charAt(i);
        if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
            set.add(ch);
        }
    }

    System.out.println("The number of vowels are:" + set.size());

}

答案 1 :(得分:1)

有一种更简洁的方法可以做到这一点:

Set<Character> vowels = new HashSet<Character>();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');

for(i=0;i<l;i++) {
    ch=s.charAt(i);
    vowels.remove(ch);
}

System.out.println("The number of vowels are:" + 5-vowels.size());

答案 2 :(得分:0)

我建议这样做。这将根据需要输出元音的数量而不重复:

int count = 0;
boolean[] vowel = {false, false, false, false, false};
char[] vowels = {'a', 'e', 'i', 'o', 'u'};
for(int i=0;i<l;i++) { //This will traverse every letter for the string
    ch=s.charAt(i);
    for(int j=0; j<5; j++) { //This will search through vowels
        //Ff any vowels are matched the count will increase,
        //But if they are already matched, count will not increase
        if(ch==vowels[j] && !vowel[j]) {
            count++;
            vowel[j] = true;
        }
    }
}
System.out.println("The number of vowels are:" + count);

答案 3 :(得分:0)

以下是使用两个arraylists的替代方法。一个包含元音,另一个空是charsInString。如果我们遇到charsInString中不存在的元音,我们可以添加到另一个元素中。我们可以使用indexOf

查找是否添加了元音
List<Character> chars = new ArrayList<Character>(Arrays.asList('a','e','i','o','u'));
List<Character> charsInString = new ArrayList<Character>();
String test = "this is a test string";

for (char a: test.toCharArray()) {
    if (chars.indexOf(a) > -1) {
        if (charsInString.indexOf(a) == -1) {
            charsInString.add(a);
        }
    }
}

System.out.println(charsInString.size());   //answer is 3

Demo