-1
嘿,我正在编写一个递归函数parseString(String s)
,它需要一个前缀表达式,如“+ 2 2”,并从中创建一个表达式树。例如,当对parseString()给出“+ 2 2”时,“+”返回一个AddExpression(左,右),左右两边都是parseString(s.substring(++i))
,这样在评估左边后,i
会更大并且离开只有正确的子字符串。问题是i
正在对原始字符串进行索引,这意味着它最终会大于子字符串的长度,并且编译器会抛出一个out of range
异常。下面是parseString()
片段只附加操作明白我的意思:Java解释器索引越界
public static Expression parseString(String s) {
if (s.length() == 0) return null;
else {
/*ADDITION*/
if (s.charAt(i) == '+') {
return new AddExpression(parseString(s.substring(++i)), parseString(s.substring(++i)));
}
/*LITERALS*/
else {
int j = i;
while (i < s.length() && s.charAt(i) != ' ') { // find the end of the number
i++;
}
return new IntExpression(s.substring(j, i));
}
}
} // parseString
有什么办法,以保持与索引整个字符串... ...不知何故(parseString只能取1个参数)或者在左侧评估后重置我,或者什么?
声明parseString方法里面的我,每次你打电话parseString是在参数的新字符串时间,因此指数应该为零 – fmodos
为什么不能添加一个接受两个参数的* second *'parseString'方法?另外,我认为你应该查找[抽象语法树](http://en.wikipedia.org/wiki/Abstract_syntax_tree)(s)。 –
@fmodos我试过了,得到了奇怪的结果 – kylecblyth