我有一个我正在研究的程序,它计算字符串中的元音数量。我有它的工作,但如果Y后面跟一个辅音,我无法计算它。我的VOWEL_GROUP是“AEIOUaeiou”它返回常规常用元音的数量而不是'y'。我看看charAt(i),看看它是否被元音组中的一个字符以外的东西预先取下。 谢谢你的帮助。 以下是显示错误的输入和输出
OUTPUT to console
Input
play. Why! Who!
There are 3 words in the file.
There are 2 vowels in the file.
There are Y 19 vowels in the file.
There are 3 sentences in the file.
// START of countThe Y Vowels********************************************
int YvowelCount=0;
for(int i=0;i<myFile.length();i++){
for(int j=0;j<VOWEL_GROUP.length();j++){
if(myFile.charAt(i)=='y' && myFile.charAt(i-1)!= VOWEL_GROUP.charAt(j)){
YvowelCount++;
}
}
}
// END of countThe Y Vowels**************************************************
答案 0 :(得分:1)
首先,您需要将y
的检查移出内循环。实际上,根本不需要内部循环。请改用String#contains()
。
接下来,因为您需要检查y
charAt()
索引需要i+1
之后的字符。出于同样的原因,您不需要检查文件的最后一个字符,因此循环运行直到小于myFile.length() - 1
。
int YvowelCount=0;
for (int i=0; i < myFile.length() - 1; i++) {
if (myFile.charAt(i) == 'y') {
if (!VOWEL_GROUP.contains(myFile.charAt(i+1) + "")) {
YvowelCount++;
}
}
}
<小时/> 如果您需要检查
y
之前的字符,请执行以下操作:(循环将从i = 1
开始)
int YvowelCount=0;
for (int i=1; i < myFile.length(); i++) {
if (myFile.charAt(i) == 'y') {
if (!VOWEL_GROUP.contains(myFile.charAt(i-1) + "") &&
Character.isLetter(myFile.charAt(i-1))) {
YvowelCount++;
}
}
}
请注意,调用Character.isLetter()
可以消除错误计数,例如当一个单词以y
开头时。
答案 1 :(得分:0)
以下是错误的,你肯定意味着i-1表示另一个索引。你正在做的是在索引i处获得字符,并在第1个字节中获取另一个字符。
myFile.charAt(i)-1
除此之外,请确保仅在i为&gt;时才使用i-1。 0
答案 2 :(得分:0)
int YvowelCount=0;
for (int i=0; i < myFile.length()-1; i++) {
if (myFile.charAt(i+1) == 'y') {
if (!VOWEL_GROUP.contains(myFile.charAt(i) + "")) {
YvowelCount++;
}
}
}
检查一下。