找不到用户输入中的“o”和最后一个元音

时间:2014-10-24 22:22:48

标签: java string if-statement for-loop while-loop

我的程序假设每行检查一个单词元音;但是,如果它是单词中的最后一个字母,或者元音是' o'我一直盯着这几个小时。任何帮助都会很棒。

import java.util.*;

public class Vowel
{

 public static void main(String[] args)
 {
   String word;      
   int len;          
   int position;     
   int vowelCount;   
   char ch;         

   Scanner kbd = new Scanner(System.in);   

   word = kbd.next();          

   while (!word.equals("the_end"))  
   {
     len = word.length() - 1;
     vowelCount = 0;


     for (position = 0; position < len-1; position++) 
     {
       ch = word.charAt(position); 
       if ((ch == 'a') || (ch == 'e') || (ch == 'i') 
       || (ch == 'o') || (ch == 'u')) vowelCount++;

     }

     System.out.print("There ");
     if (vowelCount == 1) System.out.print ("is 1 vowel in ");
     else System.out.print("are " + vowelCount + " vowels in ");

     System.out.println(word);

     word = kbd.next();  
    }
  }
 }

我现在正在尝试

for (position = 0; position < word.length(); position++) 

3 个答案:

答案 0 :(得分:1)

for (position = 0; position < len-1; position++) 
                            ^^^^^^^^

你在字符串结尾之前停止循环。

此外,如果您要将len分配给word.length()-1,那么您也可以通过这种方式切断信件。最好只写:

for (position = 0; position < word.length(); position++)

我不知道为什么它会丢失字母&#39; o&#39;但您可能想要检查是否需要将字符串转换为小写字母。目前,如果你的元音是大写字母,他们就不会被计算在内。

你可以这样做:

word = word.toLowerCase();
for循环之前

答案 1 :(得分:1)

假设您有一个六个字母的单词"kitten"。第一个字符位置为0,因此您希望循环中的position采用值0,1,2,3,4和5.

您的代码实际执行的操作:

 len = word.length()-1;

这会将len设置为5。

 for (position = 0; position < len-1; position++) 

由于len-1为4,因此只会position < 4运行循环。也就是说,只要position达到4,它就会退出(因为4 < 4false)。所以position只会取值0,1,2,3。也就是说,你将被2关闭。

在上面的代码中删除两个 -1将消除此问题。

答案 2 :(得分:0)

您似乎想要遍历整个String,但您有

len = word.length()-1;
...
for (position = 0; position < len-1; position++) 
                           //  ^^^ why?

您将String 2个字符缩短了。别这么做。

for (position = 0; position < word.length(); position++)