2

这是我查找号码的代码。字符串中的元音:

{
    String inyo=inpeo.getText().toLowerCase();
    System.out.println(inyo); // Just checking for an empty string

    int vowcount=0;
    for(int i=0;i<=inyo.length();i++)
 {           
        char rol=inyo.charAt(i);
        if(rol=='o'||'u'==rol||rol=='a'||rol=='e'||rol=='i')
        {
            vowcount=vowcount+1;
            System.out.println(vowcount);
        }

        numout.setText(""+vowcount);

    }
}                                        

现在,这里的输出没有任何问题 - 它找到了确切的编号。如我所愿的元音。但它给了我这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(String.java:646)
at WordCheck.jButton2ActionPerformed(WordCheck.java:147)
// Extra errors removed as they're irrelevant to my issue

结果,除了关闭并重新启动程序之外,没有其他方法可以重用程序。当输出按需要输出时,为什么会出现此错误?我也没有得到任何空字符串。

4

4 回答 4

3

循环的最后一次迭代for导致异常(何时i == inyo.length())。只需将其替换为:

for(int i=0; i<inyo.length(); i++)
于 2014-09-08T17:43:14.407 回答
3

i<=inyo.length()这里。字符串索引从 0 开始。长度计数从 1 开始。因此,当 String 的长度为 5 时,String 的最后一个索引为 4。

它应该是

i<inyo.length()

于 2014-09-08T17:43:29.250 回答
1

你的for循环走得太远了,这个

for(int i=0;i<=inyo.length();i++)

应该

for(int i=0;i<inyo.length();i++)

请注意,当i == invo.length()它通过数组末尾时,因为 Java 开始使用0.

于 2014-09-08T17:44:00.697 回答
1

for循环应该是

for(int i=0; i<inyo.length(); i++)

目前,当它进入最后一次迭代时,字符串的索引是 4 而是inyo.length()5。因此它导致超出范围。

于 2014-09-08T17:44:08.407 回答