运行时出错,在构建时工作正常

时间:2014-02-25 15:16:59

标签: java runtimeexception

首先,这是一个学校班级。 这是我的计划:

import java.util.*;

public class Exitearly1 {
    public static void main(String[] args) {
        Scanner kbinput = new Scanner(System.in);
        System.out.println("Please input your name: ");
        String name = kbinput.next();
        int count = 0;
        while (count < name.length()) {
            count++;
            int res = name.charAt(count);
            if ((res == 'a') || (res == 'A'))
                continue;
            System.out.println(name.charAt(count));
        }
        System.out.println("Name with no A's");
    }
}

它打印我正在输入的内容(Andrea)没有像它想象的那样,但是在这样做之后而不是打印出最后一行它在输出中给出了这个:

n
d
r
e
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    at java.lang.String.charAt(String.java:686)
    at Exitearly1.main(Exitearly1.java:13)

我尝试了许多不同的方法来修复它,没有改变它,我来到这里因为我问我的老师如何解决它,她只告诉我我已经知道它有什么问题。

2 个答案:

答案 0 :(得分:2)

你从位置 1 迭代到位置 name.length(),所以你超出了范围(因为stringvar.charAt(stringvar.length( ))总是导致超出范围的异常。

奥廖尔的解决方案可能会以无限循环结束。你应该这样做:

while (count < name.length())
{       
    int res = name.charAt(count);
    if (( res !='a')&&(res !='A')) {
      System.out.println(name.charAt(count));
    }
    count++;
}

请注意,您的代码永远不会显示字符串的第一个位置,而与“A”或其他任何内容无关。

答案 1 :(得分:1)

虽然其他人指出了你的错误(你在用它来读取它所描述的位置之前增加了计数器)我建议使用增强的for循环(它可以迭代数组,或实现{{1的类的实例接口),类似

Iterable