public static void isMatchHelper(String input, String pattern, boolean ret){
if(pattern.length() == 0 && input.length() == 0){
ret = true;
}
else if(pattern.length() == 0){
ret = false;
}
else if(input.length() == 0){
ret = true;
}
if(pattern.length() == 0 || input.length() == 0){
return;
}
else if(pattern.charAt(0) == input.charAt(0)){
isMatchHelper(input.substring(1), pattern.substring(1), ret);
}
if(pattern.charAt(0) == '.'){
isMatchHelper(input, pattern.substring(1), ret);
}
if(pattern.charAt(0) == '*'){
if(pattern.length() > 1){
int countMatches = 0;
char compareWith = pattern.charAt(countMatches + 1);
while( countMatches != input.length() && input.charAt(countMatches) == compareWith){
countMatches++;
}
isMatchHelper(input.substring(countMatches), pattern.substring(2), ret);
}
else{
ret = true;
}
}
if(pattern.charAt(0) != input.charAt(0)){
isMatchHelper(input, pattern.substring(1), ret);
}
}
我已经尝试输入它进入第一个输入,并且ret是真的,但是再次,当我检查它时ret的值仍然是假的。我知道这可能与传递值有关,我尝试传递一个布尔对象,并使用不起作用的Boolean.FALSE或Boolean.TRUE。我传递了一个带有1个参数的布尔数组,这很有效。
我的问题现在或多或少是一个概念问题,为了提高我的理解,我想知道为什么布尔值没有按计划运行。这是一个值得关注的问题,还是其他什么?我必须承认,在某些时候我认为使用布尔vs布尔可能是修复。
我期待着你的帮助。
答案 0 :(得分:7)
由于这是Java,因此无法通过引用传递参数。
相反,只需从方法中返回值。
public static boolean isMatchHelper(String input, String pattern) {
boolean ret;
.... // Rest of your code
.... // Replace all return statements with return ret;
return ret;
}
为了清楚起见,因为函数是递归的,所以你可以像改变非递归调用一样改变递归调用:
这一行
isMatchHelper(input, pattern.substring(1), ret);
成为这一行:
ret = isMatchHelper(input, pattern.substring(1));