我已经编写了第一部分的代码,但它计算了包含重复的元音数量,但我也想知道如何计算元音的数量而不重复。
此外,我正在努力编写代码的第二部分,即报告元音的总和。
这是我到目前为止所写的内容:
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);
}
}
答案 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