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
计算机在执行此递归方法时关闭其工作空间时发生了什么?
答案 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);
}