递归字符串超出界限

时间:2016-02-01 14:12:26

标签: java string recursion

void two(int i)
{
    if(i<s.length());
    {
        char a=s.charAt(i);
        if(a==' ')
            a-=2;               
        a+=2;
        if((a<64||a>90)&&a!=32)
            a-=26;
        System.out.print(a);
        two(i+1);
    }
}

s是一个全局变量。当我执行时,它正确地给出了我的输出,但最后它给了我以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 12

计算机在执行此递归方法时关闭其工作空间时发生了什么?

1 个答案:

答案 0 :(得分:2)

if语句之后删除分号,因为它只表示每个被调用的方法执行一次的空语句。这使得括号内的其余语句不会绑定到if语句,并且每次调用方法时都会执行它们。

由于您在每次递归调用时增加了索引i,并且括号中的语句独立于if执行,因此您在ArrayIndexOutOfBoundsException <上获得char a=s.charAt(i); / p>

if(i<s.length());
                ↑

你应该得到类似的东西:

if(i<s.length()) {
    char a=s.charAt(i);
    if(a==' ')
        a-=2;               
    a+=2;
    if((a<64||a>90)&&a!=32)
        a-=26;
    System.out.print(a);
    two(i+1);
}