0

我正在开发一个程序来计算字符串中元音的数量。我让它工作,但如果 Y 后面跟着一个辅音,我就不能让它数 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**************************************************   
4

3 回答 3

1

首先,您需要将检查y移出内部循环。实际上,您根本不需要内部循环。改为使用String#contains()

接下来,因为您需要检查 a 之后的字符,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.

于 2013-10-26T22:11:52.477 回答
0

以下是错误的,您的意思肯定是 i-1 表示另一个索引。您正在做的是在索引 i 处获取字符并减去 1 以获取另一个字符。

myFile.charAt(i)-1

除此之外,请确保仅当 i > 0 时才使用 i-1。

于 2013-10-26T22:08:43.617 回答
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++;
     }
  }
}

检查这个。

于 2013-10-26T22:45:50.487 回答