안녕하세요 저는 "+ 2 2"와 같은 접두사 표현식을 사용하는 표현식 트리를 만드는 재귀 함수 parseString(String s)
을 작성하고 있습니다. 예를 들어, parseString()에 "+ 2"가 주어지면 "+"는 왼쪽과 오른쪽이 모두 parseString(s.substring(++i))
인 AddExpression (왼쪽, 오른쪽)을 반환합니다. 그러면 왼쪽이 계산 된 후 i
은 더 커지고 오른쪽 부분 문자열 만. 문제는 i
이 원래 문자열을 기준으로 인덱싱하는 것이므로 결국 하위 문자열의 길이보다 커서 컴파일러에서 out of range
예외를 throw합니다. 여기 parseString()
의 조각이 무슨 뜻인지 볼 만 추가 작업과 함께입니다 :자바 인터프리터가 범위를 벗어남
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 개 매개 변수를 사용합니다) , 또는 왼쪽을 평가 한 후 i를 재설정하거나 무엇을 할 수 있습니까?
가 parseString을 방법 안에 내가, 당신이 parseString을 매개 변수에 새로운 문자열로 전화를 할 때마다, 그래서 인덱스를 선언 0이어야합니다 – fmodos
왜 두 개의 인수를 취하는 * 두 번째 *'parseString' 메서드를 추가 할 수 없습니까? 또한 [Abstract syntax tree] (http://en.wikipedia.org/wiki/Abstract_syntax_tree)를 검색해야한다고 생각합니다. –
@fmodos 나는 그것을 시도하고 이상한 결과를 얻었다 – kylecblyth