2009-10-15 27 views
2

这个节目,我正在做一个COSC当然不是编译吧,我不断收到错误:螺纹字符串索引超出范围? (Java中,子环)

异常“主要” java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2

在java.lang.String.substring(String.java:1765) 在VowelCount.main(VowelCount.java:13)

这里是我的代码:

import java.util.Scanner; 

public class VowelCount { 
public static void main(String[] args) { 
    int a = 0, e = 0, i = 0, o = 0, u = 0, count = 0; 
    String input, letter; 
    Scanner scan = new Scanner (System.in); 

    System.out.println ("Please enter a string: "); 
    input = scan.nextLine(); 

    while (count <= input.length()) { 
    letter = input.substring(count, (count + 1)); 

    if (letter == "a") { 
    a++; } 
    if (letter == "e") { 
    e++; } 
    if (letter == "i") { 
    i++; } 
    if (letter == "o") { 
    o++; } 
    if (letter == "u") { 
    u++; } 

    count++; 

    } 
    System.out.println ("There are " + a + " a's."); 
    System.out.println ("There are " + e + " e's."); 
    System.out.println ("There are " + i + " i's."); 
    System.out.println ("There are " + o + " o's."); 
    System.out.println ("There are " + u + " u's."); 
} 
} 

要我的知识边缘这应该工作,但为什么不呢?任何帮助都会很棒。谢谢!

回答

5

您可能需要取出=该行

while (count <= input.length()) { 

,并使其

while (count < input.length()) { 

,因为它是造成子读取超出字符串的长度。

=============== 但我要补充意见的,即使它不是问了几个额外的比特:

不使用==来比较字符串使用

letter.equals("a") 

代替。甚至更好,尝试使用

char c = input.charAt(count); 

,以获得当前字符则比较像这样:

c == 'a' 
0

卸下等号应该解决这个问题。

while (count < input.length()) {

既然你想获得一个字符,你应该这样做:

substr(count,1)

,因为第二个参数实际上是长度,而不是指数。

+0

好吧,它编译!但仍然没有输出正确的金额。测试字符串“aeiou”结果为0,0,0,0,0 .. – Brad 2009-10-15 01:39:21

+0

更改为'substr(count,1)' – mauris 2009-10-15 01:42:03

+0

不要使用==来比较字符串,如其他答案 – 2009-10-15 01:42:59

0

我觉得你的循环条件应该是count < input.length。眼下,最后一次迭代与count == length运行,所以你的substring呼叫字符串,这是违法的最后一个字符之后给出一个开始索引。写这样的循环时,这些类型的边界错误是很常见的,所以这是一件好事,双精度和三重检查您的循环条件下,如果遇到这样的错误。

此外,在==操作比较字符串通常不会做你想要的。比较两个变量是否引用同一个对象。相反,你要测试string1.equals(string2),它比较两个字符串的内容。

0

与大家的帮助,特别是文森特固定它。谢谢!运行非常好。

import java.util.Scanner; 

public class VowelCount { 
    public static void main(String[] args) { 
     int a = 0, e = 0, i = 0, o = 0, u = 0, count = 0; 
     String input; 
     char letter; 

     Scanner scan = new Scanner (System.in); 

     System.out.print ("Please enter a string: "); 
     input = scan.nextLine(); 

     while (count < input.length()) { 
      letter = input.charAt (count); 

      if (letter == 'a') 
       a++; 
      if (letter == 'e') 
       e++; 
      if (letter == 'i') 
       i++; 
      if (letter == 'o') 
       o++; 
      if (letter == 'u') 
       u++; 

      count++; 

     } 
     System.out.println ("There are " + a + " a's."); 
     System.out.println ("There are " + e + " e's."); 
     System.out.println ("There are " + i + " i's."); 
     System.out.println ("There are " + o + " o's."); 
     System.out.println ("There are " + u + " u's."); 
    } 
} 
+0

中提到的那样,您可以使用for循环以进一步整理它: - for(int count = 0; count pstanton 2009-10-15 04:03:01

+0

这不会提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 – WilQu 2014-05-30 14:04:47

+0

@WilQu你读过这个问题吗?这是发布工作解决方案的OP。这应该如何评论? – meda 2014-05-30 14:08:32

0

循环之前,请尝试以下

if(input.length()>0){ 
//you code 
} 
相关问题