Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ';o';未找到用户输入中的最后一个元音_Java_String_If Statement_For Loop_While Loop - Fatal编程技术网

Java ';o';未找到用户输入中的最后一个元音

Java ';o';未找到用户输入中的最后一个元音,java,string,if-statement,for-loop,while-loop,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

我的程序假设每行检查一个单词的元音;然而,如果它是单词中的最后一个字母,或者如果元音是“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();  
    }
  }
 }
import java.util.*;
公共类元音
{
公共静态void main(字符串[]args)
{
字符串字;
内伦;
内部位置;
int元音计数;
char ch;
扫描仪kbd=新扫描仪(System.in);
word=kbd.next();
而(!word.equals(“the_end”))
{
len=word.length()-1;
元音计数=0;
对于(位置=0;位置
我现在正试着用它

for (position = 0; position < word.length(); position++) 
(位置=0;位置 我不知道为什么会丢失字母“o”,但您可能需要检查是否需要将字符串转换为小写。目前,如果你的元音是大写字母,它们不会被计算在内

您可以通过以下方式实现:

word = word.toLowerCase();

在您的
for
循环之前。

您似乎希望迭代整个
字符串,但是

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

假设你有一个六个字母的单词,
“kitten”
。第一个字符的位置是0,因此您希望循环中的
position
接受值0、1、2、3、4和5

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

 len = word.length()-1;
这将
len
设置为5

 for (position = 0; position < len-1; position++) 
(位置=0;位置
由于
len-1
是4,因此只要
位置<4
,这将只运行循环。也就是说,只要
位置
达到4,它就会退出(因为
4<4
false
)。因此
position
将只接受值0、1、2、3。也就是说,你将在2点前离开


去掉上面代码中的
-1
将消除问题。

仍然没有,我得到相同的结果。我想我试过了,然后又改回来了。@Jengo为我工作。你认为你试过了吗?还是你试过了?我试过“骨头”这个词,如果是元音,它不会算我的“o”或最后一个字母。我试过了,没有变化。@Jengo你一定没有按照我的建议做变化。在我看来,如果是元音,你的代码不会算单词的最后两个字母。因此,
o
的问题可能在于你只给它一些像“劳动”这样的词。我在编辑之后(以及在退出之前)尝试了你的精确程序:
骨头中有两个元音。这是正确的答案,对吗?不要这样编辑你的问题。它使答案过时。如果需要,请编辑并附加任何您不理解的新尝试。是的,当我键入bone时,我得到“bone中有0个元音”删除您编译的文件,然后重新编译以确保您没有仍然运行损坏的版本。此操作仍将关闭1。
len
是从
word.length()-1
创建的。它仍然是后面的一个字符。我也更改了它,仍然没有任何更改。@SotiriosDelimanolis我正在查看问题中的代码,我看不到您所指的
len=word.length()-1
。@khelwood他们已经编辑过了。我重新编辑,至少显示了原始问题。我做到了。例如,单词“bone”将不计算“e”,因为它是最后一个字母。出于某种原因,它将计算“o”。
for (position = 0; position < word.length(); position++) 
 len = word.length()-1;
 for (position = 0; position < len-1; position++)